Satu -- pendekatan yang diakui berat -- adalah menggunakan strace
:
$ strace -e trace=none -e signal=none -p 12345
akan menonton proses dengan PID 12345, tidak mencegat panggilan sistem (-e
pertama ) dan tidak ada sinyal (-e
kedua ). Setelah proses keluar dengan cara biasa, nilai keluar akan dicetak.
Jika proses diakhiri oleh sinyal, strace keluar secara diam-diam (saat dijalankan dengan opsi yang diberikan di atas). Anda dapat menggunakan mis. -e signal=kill
untuk mengubah perilaku ini. Perhatikan, bahwa -e signal=all
(atau, dengan kata lain, menghilangkan -e signal
opsi) mungkin menghasilkan keluaran dalam jumlah besar jika sinyal diterima dan ditangani oleh program.
-
Merangkai eksekusi "notify"
$ process; notify $? &
Perhatikan bahwa jika proses akan keluar dengan cara yang tidak terduga
notify
tidak akan dieksekusi -
Menyiapkan jebakan
Proses ditandai oleh sinyal dari arti yang berbeda dan dapat bereaksi dengan tepat
#!/bin/bash process function finish { notify $? } trap finish EXIT
Anda tidak jelas pemberitahuan apa yang ada dalam pikiran Anda. Intinya bisa apa saja yang membunyikan "bel" tentunya. Satu untuk banyak misalnya. notify-send
dari libnotify
perpustakaan.
$ process; notify-send "process finished with status $?" &
Bash melakukan ini untukmu. Ini akan memberi tahu Anda ketika proses berakhir dengan memberi Anda kontrol kembali dan akan menyimpan status keluar dalam variabel khusus $?
. Kira-kira seperti ini:
someprocess
echo $?
Lihat manual bash tentang parameter khusus untuk informasi selengkapnya.
Tapi saya berasumsi bahwa Anda ingin melakukan pekerjaan lain sambil menunggu. Di bash Anda bisa melakukannya seperti ini:
someprocess &
otherwork
wait %+
echo $?
someprocess &
akan memulai proses di latar belakang. Itu berarti kontrol akan segera kembali dan Anda dapat melakukan pekerjaan lain. Proses yang dimulai di latar belakang disebut pekerjaan di bash. wait
akan menunggu pekerjaan yang diberikan selesai dan kemudian mengembalikan status keluar dari pekerjaan itu. Pekerjaan direferensikan oleh %n
. %+
mengacu pada pekerjaan terakhir dimulai. Lihat manual bash tentang kontrol tugas untuk informasi lebih lanjut.
Jika Anda benar-benar membutuhkan PID, Anda juga dapat melakukannya seperti ini:
someprocess &
PID=$!
otherwork
wait $PID
echo $?
$!
adalah variabel khusus yang berisi PID dari proses latar belakang yang terakhir dimulai.