Buradaki sorudan , OP pidof
bir kabuk betiğinde kullanılan bir işlemin pid'ini tekrar tekrar yoklamak istiyor . Elbette bu, pidof
program için saniyede birkaç kez yeni bir işlem başlatılması gerektiği için verimsizdir (bu sorunun CPU sivri uçlarının nedeni olduğunu bilmiyorum, ancak muhtemelen görünüyor).
Genellikle bir kabuk komut dosyasında bu tür bir şey, ihtiyacınız olan verileri çıktı tek bir program ile çalışmak stdout
ve daha sonra gerekirse bazı metin işleme yapmaktır. Bu, eşzamanlı olarak daha fazla programın çalışmasını gerektirse de, yoklama amacıyla sürekli olarak yeni işlemler oluşturulmadığından CPU yoğunluğu daha düşük olacaktır.
Dolayısıyla yukarıdaki soru için, çözümlerden biri, oluşturuldukça süreçlerin adlarını ve pidlerini çıkaran bir programa sahip olmak olabilir. Sonra şöyle bir şey yapabilirsiniz:
pids-names |
grep some_program |
cut -f 2 |
while read pid; do
process-pid "$pid"
done
Buradaki sorun, daha temel bir soru ortaya çıkarması, pids ve işlem adları oluşturuldukça nasıl yazdırılabilir?
ps-watcher
Bu sorun denilen bir program bulduk , ancak bu sorun sadece perl
tekrar tekrar çalışan bir komut dosyasıdır, bu ps
yüzden gerçekten sorunu çözmez. Başka bir seçenek, auditd
günlük doğrudan üzerinden işlendiğinde muhtemelen işe yarayabilecek bir yöntem kullanmaktır tail -f
. İdeal bir çözüm bundan daha basit ve daha taşınabilir olacaktır, ancak auditd
en iyi seçenek ise bir çözümü kabul edeceğim .
dbus
).
fork
, daha sonra yeni programın birexec
ailenin üyesi kullanılarak başlatılmasıdır . Yani muhtemelenexec*
değil, giriş yapmak istiyorumfork
.