ฉันจะฆ่ากระบวนการด้วยชื่อได้อย่างไร


44

บางครั้งฉันสังเกตเห็นว่ากระบวนการPythonวางสาย งั้นฉันจะฆ่ามันด้วย Activity Monitor และทุกอย่างก็เรียบร้อย

ฉันต้องการฆ่ากระบวนการนั้นในเทอร์มินัลแทน อย่างไรก็ตามมองขึ้นดูเหมือนว่าชนิดของที่ไม่จำเป็นเพราะมีเพียงหนึ่งขั้นตอนโดยชื่อPIDPython

เป็นไปได้หรือไม่ที่จะฆ่ากระบวนการด้วยชื่อเฉพาะ?

คำตอบ:


52

sudo killall Pythonคุณควรจะสามารถเรียกใช้คำสั่ง

คุณต้องเรียกใช้เป็นรูทเนื่องจาก Python เป็นของรูทไม่ใช่ผู้ใช้


ฉันทำอย่างนั้น:No matching processes belonging to you were found
gentmatt

1
กระบวนการ Python ไม่ได้เป็นของผู้ใช้ของคุณ sudo killall Pythonลองมันเป็นรากแทน:
HenningJ

1
@ HenningJ Sudo ทำงานด้วยเหตุผลบางอย่าง ฉันเพิ่งเห็นว่ากระบวนการนี้เป็นของฉัน ฉันจะฆ่ากระบวนการโดยไม่ต้องเมื่อฉันถูกฆ่าตายโดยใช้มันsudo PIDทำไม?
gentmatt

1
ฉันคิดว่าเป็นเพราะการใช้ PID ไม่ใช่ผู้ใช้ / รูทเฉพาะในขณะที่ชื่อกระบวนการคือ sudoฉันจะแก้ไขคำตอบนี้สะท้อนให้เห็นถึง
แมตต์เลิฟ

นอกจากนี้ยังใช้งานได้กับกระบวนการที่มีชื่อเหมือนกันหลายอย่างดี
chrismarx

20
sudo killall -s SIGINT "process name"

หากคุณไม่สามารถเป็น sudo ได้เพราะมันจะขอรหัสผ่านและฉันรู้สึกว่าคุณไม่ต้องการสิ่งนั้นในสคริปต์ pkill มาเพื่อช่วยเหลือ :)

pkill -9 "process name"

5

คุณสามารถฆ่าแอปพลิเคชันโดยใช้ Activity Monitor.app ซึ่งเป็นโซลูชัน GUI นั่นจะเป็น "แรงลาออก" อย่างง่าย อย่างไรก็ตามนั่นไม่ได้ผลสำหรับเหตุผลที่แตกต่างกันในบางสถานการณ์!

โซลูชันบรรทัดคำสั่งตามที่กล่าวไว้ในความคิดเห็นด้านบนมีตัวเลือกมากขึ้นสำหรับผู้ใช้ sudo killall Pythonหรือถ้ามันเป็นกระบวนการโปรแกรมกำลังทำงานsudo killall /Applications/Whatever.appบังคับให้กระบวนการเลิกเช่นกัน

นอกจากนี้คุณยังสามารถบังคับกระบวนการที่จะเลิกใช้ที่ได้รับมอบหมายPID ในกรณีของ Activity Monitor.app มันจะเป็นkill 25794หรือkill -9 25794

ป้อนคำอธิบายรูปภาพที่นี่

รายละเอียดเพิ่มเติมบางส่วน:

โปรแกรม kill ในเทอร์มินัลบังคับให้ออกจากโปรแกรมราวกับว่าใช้รีโมตคอนโทรล (มันยังทำงานได้เมื่อคุณ SSH ใน Mac ของคุณจากสถานที่ห่างไกลทำตามคำสั่ง kill ด้วยหมายเลข ID กระบวนการ (PID สั้น) ของโปรแกรมที่คุณต้องการยกเลิก

นอกจากว่าคุณจะใช้ sudo ด้วยคุณสามารถฆ่าเฉพาะโปรแกรมที่คุณ“ เป็นเจ้าของ” - ผู้ที่ทำงานภายใต้บัญชีของคุณ (ระบบปฏิบัติการตัวเอง - รูท - มักจะใช้งานโปรแกรมของตัวเองอยู่เสมอและเป็นไปได้ทางเทคนิคที่คนอื่น ๆ กำลังโทรเข้ามาจากท้องถนนกำลังเรียกใช้โปรแกรมของตัวเองแม้ในขณะที่คุณใช้ Mac!)

-9ธง“ไม่ catchable ฆ่าไม่ใช่เพิกเฉย.” ในคำอื่น ๆ ก็เป็นฆาตกรแรงอุตสาหกรรมที่ยอมรับไม่อ้อนวอนขอความเมตตาจากโปรแกรมที่คุณกำลังฆ่า


5

แม้ว่ามันจะใช้ PID แต่ฉันคิดว่าสิ่งต่อไปนี้จะค่อนข้างมีประสิทธิภาพ:

ps aux | grep "String or name of process"

บรรทัดนี้ส่งคืนโฮสต์ของข้อมูลเกี่ยวกับกระบวนการจับคู่และคุณสามารถkillหรืออะไรก็ตามจากที่นั่น


2
pkill -f "process name"

อ้างอิงจากhttps://stackoverflow.com/a/22334807/1243763


1
มี pidof บน macOS หรือไม่? และทำไมไม่ใช้ pkill ซึ่งไม่มีปัญหาของกระบวนการเพิ่มเติม
nohillside

เห็นด้วยและฉันก็พลาดไป ฉันมีไบนารีเป็นชื่อแทนไม่ได้มาตรฐานของpidof ps -e -o pid,args | grep -E "\b$1\b" | awk "{print \$1}" | tr '\n' ' 'ดังนั้นpkill -fทำให้รู้สึกมากขึ้น
Samir
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.