มีวิธีการมาตรฐานถ้าโปรแกรมร่วมมือ รัน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