สำหรับปัญหาประเภทนี้มักจะดีที่สุดที่จะเริ่มต้นโดยแบ่งเป็นส่วนที่เป็นส่วนประกอบ เริ่มต้นด้วยนิพจน์ด้านในสุดซึ่งดูเหมือนว่ามีจุดมุ่งหมายเพื่อให้ได้รับ PID ทั้งหมดmyprocess
เพื่อส่งสัญญาณและดำเนินการออกไปข้างนอกทดสอบแต่ละขั้นตอนเพื่อให้แน่ใจว่ามันจะให้ผลลัพธ์ที่คุณคาดหวัง
คุณกำลังทำสิ่งนี้โดยการเอาท์พุทของps
grepping สำหรับกระบวนการรันเอาต์พุตผ่านawk
เพื่อแยก PID ที่เกี่ยวข้องจากนั้นส่งผ่านไปยัง xargs โดยการดูว่าคุณพยายามทำอะไรจริง ๆมากกว่าปัญหาเฉพาะที่คุณกำลังเผชิญอยู่ฉันสามารถบอกได้ว่ามีวิธีที่ดีกว่าอย่างน้อยสองวิธีในการทำเช่นนี้ซึ่งบังเอิญหลีกเลี่ยงปัญหาที่คุณกำลังเผชิญอยู่ ในการมีจำนวนชั้นของข้อความในคำสั่งผสมเดียว)
หนึ่งคือการรักษาps
และใช้-C
และ-o
พารามิเตอร์เพื่อรับข้อมูลที่คุณสนใจเท่านั้นนี่คือตัวอย่างในหน้า man (1) ps จากนั้นคุณจะต้องการ:
ps -C myprocess -o pid=
ซึ่งจะพิมพ์เฉพาะ PID (s) ของกระบวนการใด ๆ myprocess
ที่มีชื่อภาพ สิ่งนี้จะถูกส่งไปยัง xargs แทนของคุณps ... | xargs kill
ด้วย:
ps -C myprocess -o pid= | xargs kill
หรืออาจใช้การทดแทนกระบวนการเพื่อหลีกเลี่ยง pipe และ xargs ทั้งหมด:
kill $( ps -C myprocess -o pid= )
ทางเลือกที่ดียิ่งขึ้นคือการใช้killall
ในการส่งสัญญาณกระบวนการทั้งหมดที่มีชื่อภาพที่ได้รับโดยตรง
killall -e myprocess
ที่นี่-e
ระบุโหมด "แน่นอน" ซึ่งภาพของกระบวนการตรงกันมาก ในกรณีนี้แทนที่ของคุณps ... | xargs kill
ทั้งหมดด้วยข้างต้น
-o UserKnownHostsFile=/dev/nul
โอ้และชื่อทั่วไปคือ / dev / null ไม่ใช่ / dev / nul NUL
คือ CP / M-ism จากกลางทศวรรษ 1970 โดย Microsoft ส่งต่อไปยัง Windows รุ่นปัจจุบัน ในกรณีนี้โดยเฉพาะอย่างยิ่งผลกระทบที่อาจจะหรืออาจจะไม่เหมือนกันขึ้นอยู่กับวิธีที่เข้มงวดของคุณssh
คือ