ในbashคุณควรจะทำ:
kill $(ps aux | grep '[p]ython csp_build.py' | awk '{print $2}')
รายละเอียดเกี่ยวกับผลงานมีดังนี้
- กระบวนการนี้
psให้รายการกระบวนการทั้งหมดแก่คุณ
grepตัวกรองที่อยู่บนพื้นฐานของสตริงการค้นหาของคุณ[p]เป็นเคล็ดลับที่จะหยุดคุณยกขึ้นจริงgrepกระบวนการตัวเอง
awkเพียงช่วยให้คุณมีฟิลด์ที่สองของแต่ละบรรทัดซึ่งเป็น PID
- การ
$(x)สร้างหมายถึงการดำเนินการxแล้วเอาออกและวางไว้บนบรรทัดคำสั่ง ผลลัพธ์ของpsไปป์ไลน์ดังกล่าวภายในโครงสร้างที่สร้างไว้ด้านบนคือรายการรหัสกระบวนการดังนั้นคุณจึงต้องใช้คำสั่งเช่นkill 1234 1122 7654นั้น
นี่คือการถอดเสียงที่แสดงการทำงาน:
pax> sleep 3600 &
[1] 2225
pax> sleep 3600 &
[2] 2226
pax> sleep 3600 &
[3] 2227
pax> sleep 3600 &
[4] 2228
pax> sleep 3600 &
[5] 2229
pax> kill $(ps aux | grep '[s]leep' | awk '{print $2}')
[5]+ Terminated sleep 3600
[1] Terminated sleep 3600
[2] Terminated sleep 3600
[3]- Terminated sleep 3600
[4]+ Terminated sleep 3600
และคุณสามารถเห็นมันยุติไม้หมอนทั้งหมด
อธิบายgrep '[p]ython csp_build.py'รายละเอียดเพิ่มเติมเล็กน้อย:
เมื่อคุณทำsleep 3600 &ตามps -ef | grep sleepนั้นคุณมักจะได้รับสองกระบวนการsleepในนั้นsleep 3600และgrep sleep(เพราะทั้งคู่มีsleepในนั้นนั่นไม่ใช่วิทยาศาสตร์จรวด)
แต่ps -ef | grep '[s]leep'จะไม่สร้างกระบวนการที่มีsleepอยู่ในนั้นมันแทนสร้างgrep '[s]leep'และนี่เป็นบิตหากินที่: grepไม่พบเพราะมันกำลังมองหาการแสดงออกปกติ "ตัวอักษรใด ๆ จากตัวอักษรชั้นเรียน[s](ซึ่งเป็นs) leepตามด้วย
กล่าวอีกนัยหนึ่งมันกำลังมองหาsleepแต่กระบวนการ grep นั้นgrep '[s]leep'ไม่มีsleepอยู่ในนั้น
เมื่อฉันแสดงสิ่งนี้ (โดยคนที่นี่บน SO) ฉันเริ่มใช้มันทันทีเพราะ
- มันเป็นกระบวนการหนึ่งน้อยกว่าการเพิ่ม
| grep -v grep; และ
- มันหรูหราและส่อเสียดการรวมกันที่หายาก :-)