Buradaki sorudan , OP pidofbir kabuk betiğinde kullanılan bir işlemin pid'ini tekrar tekrar yoklamak istiyor . Elbette bu, pidofprogram 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 stdoutve 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-watcherBu sorun denilen bir program bulduk , ancak bu sorun sadece perltekrar tekrar çalışan bir komut dosyasıdır, bu psyüzden gerçekten sorunu çözmez. Başka bir seçenek, auditdgü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 auditden iyi seçenek ise bir çözümü kabul edeceğim .
dbus).
fork, daha sonra yeni programın birexecailenin üyesi kullanılarak başlatılmasıdır . Yani muhtemelenexec*değil, giriş yapmak istiyorumfork.