มีวิธีการมาตรฐานถ้าโปรแกรมร่วมมือ รันkill -- -42
โดยที่ 42 คือ pid ของกระบวนการพาเรนต์ สิ่งนี้ส่งสัญญาณไปยังกระบวนการทั้งหมดในกลุ่มกระบวนการนำโดยกระบวนการ 42 (เครื่องหมายลบก่อน pid หมายถึงกลุ่มกระบวนการ)
โดยปกติถ้าคุณเรียกใช้สคริปต์ python ของคุณจาก shell prompt และเพียงแค่gnuchess
ดำเนินการทั้งสองกระบวนการจะยังคงอยู่ในกลุ่มกระบวนการเดียวกัน แต่นี่ไม่ใช่กรณีเนื่องจากCtrl+ Cส่งSIGINT
ไปยังกลุ่มกระบวนการพื้นหน้าทั้งหมด
Gnuchess อาจอยู่ในกลุ่มกระบวนการของตัวเองเพราะมันทำให้ตัวเองเป็นผู้นำเซสชัน (แต่ฉันไม่รู้ว่าทำไมมันถึงทำเช่นนี้) หรือเพราะคุณแยกมันออกเป็นสองเท่า ส้อมคู่อาจหลีกเลี่ยงได้ แต่ฉันไม่สามารถบอกคุณได้ว่าไม่เห็นรหัสของคุณ
วิธีที่เชื่อถือได้อย่างสมเหตุสมผลและสอดคล้องกับ POSIX ในการค้นหา pid ของgnuchess
กระบวนการคือ
gnuchess_pids=$(ps -A -o pid= -o cmd= | awk '$2 ~ /(^|\/)gnuchess$/ {print $1}')
pgrep
เฉพาะยูนิกซ์สายพันธุ์อาจจะมีวิธีที่ดีกว่าในการบรรลุนี้เช่น
pkill
เพื่อฆ่ากระบวนการตามชื่อดังนั้นคุณps aux | grep gnuchess
และkill -9 PID
สามารถกลายเป็นได้pkill -9 gnuchess