Ada beberapa pertanyaan dan jawaban di sini berkenaan dengan disiagakan ketika suatu proses menyelesaikan / keluar ( 1 , 2 ) - tetapi ini semua menganggap bahwa pengguna telah mengeluarkan proses tersebut sendiri, dan dengan demikian dapat skrip dengan peringatan yang dibangun ke dalam skrip yang mengatur, atau pipa proses ke semacam peringatan.
Situasi saya adalah bahwa saya ingin diberitahu tentang penyelesaian / keluar dari proses yang tidak diinisialisasi oleh pengguna saya. Yaitu, saya sedang memproses file video besar di server Ubuntu 12,04 LTS. Operasi tertentu pada file-file ini membutuhkan waktu yang sangat lama, jadi saya ingin beberapa jenis peringatan (email akan bagus) ketika yang spesifik selesai. Mereka butuh waktu lama, sehingga melakukan ini satu kali, secara manual, berdasarkan PIT akan baik-baik saja.
Untuk memberikan lebih banyak info - katakanlah saya sedang memproses file yang sangat besar, dan saya melihat bahwa itu telah berkembang menjadi skrip FFMPEG, prosesnya sendiri menjadi skrip python (yang cukup rumit, dan tidak ditulis sendiri, dan sesuatu Saya tidak ingin memodifikasi - meskipun itu akan menjadi pendekatan logis pertama). Saya membayangkan mengeluarkan perintah atau skrip dengan PID dari kata menjalankan skrip python sebagai argumen, dan ketika proses dengan PID tidak lagi berjalan, skrip waspada melakukan hal itu.
Ada ide?
Jawaban:
Saya menulis process_watcher.py
Saat ini, badan email terlihat seperti:
Hentikan masalah GitHub jika Anda membutuhkan perbaikan.
sumber
Sesuatu seperti ini?
Ganti
$pid
dengan id proses danecho "finished"
dengan apa pun yang ingin Anda lakukan ketika proses keluar.Sebagai contoh:
sumber
kill -0
laporanNo such process
untuk tidak ada pids danOperation not permitted
untuk pids yang dimiliki oleh pengguna yang berbeda jadi mungkin menafsirkan pesan kesalahan harus meniadakan kebutuhan untuksudo
echo -en "\007 \007 \007"
, yang akan mengeluarkan 'lonceng' terminal. Apakah itu diterjemahkan menjadi suara yang dapat didengar sebenarnya tergantung pada terminal dan perangkat keras Anda (tetapi biasanya demikian).Saya menggunakan
&&
untuk menjalankan perintah kedua ketika yang pertama selesai dengan sukses. Berikut beberapa contoh:Hapus folder besar dan bunyi bip:
Kompilasi kernel dan kirim email:
Apakah ini cara yang baik untuk menyelesaikan masalah Anda? Dalam kasus lain, Anda bisa menambahkan
||
perintah ketiga dan jika terjadi kegagalan.Juga, skrip shell dapat menerima status keluar (
$?
) dari perintah Anda, dan denganif/else
dan loop Anda dapat melakukan apa pun yang Anda inginkan.sumber
Jika Anda tidak memiliki pid, ini akan berjalan sampai semua instance ffmpeg selesai:
sumber
Jika Anda tidak ingin menggunakan opsi polling atau skrip eksternal, dan Anda sudah memulai proses yang sudah berjalan lama, Anda dapat menangguhkannya dengan CTRL + Z (mengirim sinyal SIGTSTP) dan kemudian melanjutkan dengan
fg
(memindahkan proses ke latar depan).Sebagai contoh:
sumber
Saya membuat aplikasi yang akan mengirimkan pemberitahuan ke ponsel Android Anda ketika proses berakhir sehingga Anda tidak perlu ditambatkan ke komputer Anda.
Instal, lalu tambahkan
;notifier.sh
ke akhir perintah Anda.Misalnya, jika perintah Anda adalah
make install
, Anda akan membuat perintah Anda:make install; notifier.sh
https://notifier.sh
https://play.google.com/store/apps/details?id=sh.notifier
sumber