จากคำถามที่นี่ 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