Dari pertanyaan di sini , OP ingin berulang kali melakukan polling pada pid dari proses yang digunakan pidof
dalam skrip shell. Tentu saja ini tidak efisien karena proses baru harus dimulai untuk pidof
program beberapa kali per detik (saya tidak tahu bahwa ini adalah penyebab lonjakan CPU dalam pertanyaan, tetapi tampaknya mungkin).
Biasanya cara mengatasi hal semacam ini dalam skrip shell adalah bekerja dengan satu program yang menampilkan data yang Anda butuhkan stdout
dan kemudian melakukan beberapa pemrosesan teks jika perlu. Walaupun ini melibatkan lebih banyak program yang akan berjalan secara bersamaan, itu cenderung kurang intensif CPU karena proses-proses baru tidak secara terus-menerus dibuat untuk tujuan polling.
Jadi untuk pertanyaan di atas, salah satu solusinya mungkin memiliki beberapa program yang menampilkan nama dan pids dari proses saat mereka dibuat. Maka Anda dapat melakukan sesuatu seperti:
pids-names |
grep some_program |
cut -f 2 |
while read pid; do
process-pid "$pid"
done
Masalahnya adalah ini menimbulkan pertanyaan yang lebih mendasar, bagaimana bisa pid dan nama proses dicetak saat dibuat?
Saya telah menemukan sebuah program bernama ps-watcher
, meskipun masalah dengan ini adalah hanya sebuah perl
script yang berulang kali berjalan ps
sehingga tidak benar-benar menyelesaikan masalah. Pilihan lain adalah menggunakan auditd
yang mungkin bisa berfungsi jika log diproses langsung melalui tail -f
. Solusi ideal akan lebih sederhana dan lebih portabel daripada ini, meskipun saya akan menerima auditd
solusi jika itu adalah pilihan terbaik.
dbus
).
fork
atau varian), kemudian program baru mulai menggunakan anggotaexec
keluarga. Jadi, Anda mungkin ingin mencatatexec*
, bukanfork
.