Saya ingin tahu apakah ada cara untuk mendengarkan proses di Linux & unix - kapan berakhir dan apa kode keluar dari proses (skrip).
Saya tidak ingin menulis skrip yang akan berjalan X
detik dan memeriksa ps -ef | grep PID
apakah prosesnya masih hidup. Saya ingin tahu apakah ada cara agar proses akan memberi tahu saya kapan berakhir dan apa kode keluarnya.
wait
kerjanya? Berapa banyak CPU yang biasanya akan diambil dari sistem?wait
bekerja. Saya tahu bahwa itu tidak membutuhkan jumlah sumber daya sistem yang nyata. Anda dapat meninjau kode sumber di sini: git.savannah.gnu.org/cgit/bash.git/tree/builtins/wait.defSatu - pendekatan yang tidak dapat disangkal - adalah menggunakan
strace
:akan menonton proses dengan PID 12345, memotong tidak ada panggilan sistem (pertama
-e
) dan tidak ada sinyal (kedua-e
). Setelah proses keluar secara teratur, 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, bagaimanapun, bahwa-e signal=all
(atau, secara ekuivalen, menghilangkan-e signal
opsi) dapat menghasilkan sejumlah besar output jika sinyal diterima dan ditangani oleh program.sumber
Merantai eksekusi "beri tahu"
Perhatikan bahwa jika proses akan keluar dengan cara yang
notify
tidak terduga tidak akan dieksekusiMenyiapkan perangkap
Proses ditandai oleh sinyal-sinyal dari makna yang berbeda dan dapat bereaksi dengan tepat
Anda tidak jelas pemberitahuan apa yang ada dalam pikiran Anda. Intinya bisa apa saja yang berdering "bel" tentu saja. Satu untuk banyak orang misalnya.
notify-send
darilibnotify
perpustakaan.sumber
Jika proses Anda berjalan sebagai deamon, pertimbangkan untuk menggunakan pemula atau monit, mereka semacam cara standar:
http://www.alexreisner.com/code/upstart
http://mmonit.com/monit/
Mereka dapat memonitor proses, kode keluar, memulai kembali proses, menulis log, ...
sumber
Dengan
ptrace()
Anda dapat melampirkan pelacak ke suatu proses (atau menjalankan yang baru), mengatur pengait denganPTRACE_O_TRACEEXIT
(linux> = 2.5.60) dan tidur sampai proses keluar, kemudian denganPTRACE_GETEVENTMSG
mendapatkan status keluar.Di sini contoh implementasi disebut stopper , saya memeriksanya dengan
attach
opsi saja dan diperlukan beberapa perubahan untuk membuatnya bekerja (akhirnya jika diperlukan saya akan memposting kode di suatu tempat).sumber