จากคำถามที่นี่ OP ต้องการโพลซ้ำ pid ของกระบวนการที่ใช้pidof
ในเชลล์สคริปต์ แน่นอนว่านี่ไม่มีประสิทธิภาพเนื่องจากกระบวนการใหม่จะต้องเริ่มต้นสำหรับpidof
โปรแกรมหลายครั้งต่อวินาที (ฉันไม่รู้ว่านี่เป็นสาเหตุของ CPU spikes ในคำถาม แต่ดูเหมือนว่าจะเป็นไปได้)
โดยปกติแล้วสิ่งรอบตัวในเชลล์สคริปต์คือการทำงานกับโปรแกรมเดี่ยวที่ส่งออกข้อมูลที่คุณต้องการstdout
แล้วทำการประมวลผลข้อความบางอย่างหากจำเป็น ในขณะที่สิ่งนี้เกี่ยวข้องกับโปรแกรมเพิ่มเติมที่จะทำงานพร้อมกัน แต่ก็มีแนวโน้มที่จะมี CPU น้อยลงเนื่องจากกระบวนการใหม่ไม่ได้ถูกสร้างขึ้นอย่างต่อเนื่องเพื่อจุดประสงค์ในการทำโพล
ดังนั้นสำหรับคำถามข้างต้นโซลูชันหนึ่งอาจมีโปรแกรมบางตัวที่แสดงชื่อและ pids ของกระบวนการเมื่อสร้างขึ้น จากนั้นคุณสามารถทำสิ่งที่ชอบ:
pids-names |
grep some_program |
cut -f 2 |
while read pid; do
process-pid "$pid"
done
ปัญหานี้คือว่ามันก่อให้เกิดคำถามพื้นฐานมากขึ้นวิธีการพิมพ์ชื่อและกระบวนการสามารถพิมพ์ในขณะที่พวกเขาถูกสร้างขึ้น?
ฉันพบโปรแกรมที่เรียกว่าps-watcher
แม้ว่าปัญหาของมันคือมันเป็นเพียงperl
สคริปต์ที่ทำงานซ้ำ ๆps
ดังนั้นมันจึงไม่สามารถแก้ปัญหาได้ อีกตัวเลือกหนึ่งคือการใช้งานซึ่งอาจจะทำงานหากเข้าสู่ระบบการประมวลผลโดยตรงผ่านทางauditd
tail -f
ทางออกที่ดีที่สุดจะง่ายกว่าและพกพาได้มากกว่านี้ถึงแม้ว่าฉันจะยอมรับauditd
โซลูชันถ้าเป็นตัวเลือกที่ดีที่สุด
dbus
)
fork
หรือตัวแปร) จากนั้นโปรแกรมใหม่จะเริ่มต้นโดยใช้สมาชิกของexec
ตระกูล ดังนั้นคุณอาจต้องการที่จะเข้าสู่ระบบไม่ได้exec*
fork