Saya sedang menulis skrip bash untuk digunakan inotifywait
untuk memantau direktori dan memulai tindakan ketika perubahan terdeteksi. Sesuatu seperti:
inotifywait -m ... | while read f; do something; done
Karena inotifywait
tidak berhenti dengan sendirinya, skrip ini tidak akan berhenti.
Jadi rencana saya adalah untuk mendapatkan PID dari proses inotifywait, menyimpannya ke file dan memiliki proses lain untuk membunuhnya nanti, katakan seperti:
inotifywait -m ... | { echo ??PID?? > pid-file; while ... }
Tapi saya tidak tahu bagaimana cara mendapatkan PID. Apakah ada cara sederhana untuk mencapai ini? Cara lain adalah dengan menyimpan PID dari script-shell $$
ke file dan membunuh seluruh script-shell tapi saya ingin melakukan pembersihan setelah loop sementara.
Saya sudah mencoba menggunakan coproc
dan saya pikir ini akan berhasil tetapi sepertinya lebih rumit daripada yang diperlukan.
pgrep inotifywait
. Itu akan memberi Anda PID, untuk membunuhpkill inotifwait
,.grep -v grep
, sebaliknyaps -ef | grep [p]rocessname...
akan melakukan hal yang sama.-f
saklar jika Anda perlu mencocokkan dengan lebih dari nama yang dapat dieksekusi.Jawaban:
Dalam pipa, semua proses dimulai secara bersamaan , tidak ada yang lebih awal dari yang lain.
Anda bisa melakukannya:
Atau mudah dibawa:
Juga perhatikan bahwa ketika subkulit yang menjalankan
while
loop berakhir,inotifywait
akan dibunuh secara otomatis saat berikutnya ia menulis sesuatu ke stdout.sumber
Jika Anda memerlukan ID proses dalam loop, cetak terlebih dahulu.
sumber
Jawaban SO ini tampaknya berlaku:
sumber