Dari pertanyaan di sini , OP ingin berulang kali melakukan polling pada pid dari proses yang digunakan pidofdalam skrip shell. Tentu saja ini tidak efisien karena proses baru harus dimulai untuk pidofprogram 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 stdoutdan 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 perlscript yang berulang kali berjalan pssehingga tidak benar-benar menyelesaikan masalah. Pilihan lain adalah menggunakan auditdyang mungkin bisa berfungsi jika log diproses langsung melalui tail -f. Solusi ideal akan lebih sederhana dan lebih portabel daripada ini, meskipun saya akan menerima auditdsolusi jika itu adalah pilihan terbaik.
dbus).
forkatau varian), kemudian program baru mulai menggunakan anggotaexeckeluarga. Jadi, Anda mungkin ingin mencatatexec*, bukanfork.