จะฆ่ากระบวนการทั้งหมดที่ตรงกับชื่อได้อย่างไร


260

สมมติว่าฉันต้องการฆ่าทุกขั้นตอนที่บรรจุคำว่า amarok ฉันสามารถพิมพ์คำสั่งที่ฉันต้องการใช้งานได้ แต่ฉันจะทำให้เชลล์ดำเนินการได้อย่างไร กล่าวคือ

ps aux | grep -ie amarok | awk '{print "kill -9 " $2}'
Output:
kill -9 3052
kill -9 3071
kill -9 3076
kill -9 3077
kill -9 3079
kill -9 3080
kill -9 3082
kill -9 3083
kill -9 3084
kill -9 3085
kill -9 3086
kill -9 3087
kill -9 3088
kill -9 3089
kill -9 4031

เพิ่ม| sh -xหลังจากส่วนที่เหลือของบรรทัดคำสั่งของคุณหรือไม่
Jonathan Leffler

7
ไม่เคยใช้kill -9กับกระบวนการใด ๆ ดู [การจัดการกระบวนการ] [1] [1]: mywiki.wooledge.org/ ...... ...
Fredrik Pihl

การเพิ่มความคิดเห็นข้างต้นที่ไม่เพียง แต่เป็นความคิดที่ไม่ดี แต่ยังเป็นความจริงที่ว่าคุณกำลังพยายามที่จะฆ่าหลาย ๆ กระบวนการผ่านชื่อของพวกเขา ไม่มีอะไรพิเศษเกี่ยวกับชื่อของกระบวนการและด้วยเหตุนี้จึงเป็นตัวเลือกที่ไม่ดีสำหรับการระบุตัวตน
Raul-

มันจะฆ่าamarokxกระบวนการด้วยหรือไม่ ฉัน pkill vi มันฆ่า supervisorctlซึ่งมี `vi 'ในคำว่า
Gank

4
บทความเกี่ยวกับการไม่ใช้งาน-9นั้นไม่มีประโยชน์อะไรเลย - มีข้อมูลที่ดีกว่าเกี่ยวกับสาเหตุที่คนไม่ควรใช้หรือไม่ มันเพิ่งจะพูดว่า "อย่าและยิงผู้ที่ใช้มัน"; แต่ทั้งหมดที่ฉันเคยเห็นทุกที่อื่นก็คือว่าkill -9 {pid}เป็นวิธีการที่จะฆ่าบางสิ่งบางอย่าง ...
dwanderson

คำตอบ:


437

จาก man 1 pkill

-f     The pattern is normally only matched against the process name.
       When -f is set, the full command line is used.

ตัวอย่างเช่นถ้าเราเห็นบรรทัดเหล่านี้ในps aux:

apache   24268  0.0  2.6 388152 27116 ?        S    Jun13   0:10 /usr/sbin/httpd
apache   24272  0.0  2.6 387944 27104 ?        S    Jun13   0:09 /usr/sbin/httpd
apache   24319  0.0  2.6 387884 27316 ?        S    Jun15   0:04 /usr/sbin/httpd

เราสามารถฆ่าพวกมันทั้งหมดโดยใช้-fตัวเลือกpkill :

pkill -f httpd

1
ฉันรู้ว่านี่ไม่ใช่เรื่องของคำถามนี้ แต่มันแสดงให้เห็นถึงวิธีการอื่นและสั้นกว่าในการทำสิ่งที่คุณพยายามจะทำ
Tim Bielawa

19
เพื่อความแข็งแรงเป็นพิเศษเพิ่ม-9ไปยังจุดสิ้นสุด!
mlissner

มันจะฆ่าhttpdxกระบวนการด้วยหรือไม่ ฉัน pkill vi มันฆ่า supervisorctlซึ่งมี `vi 'ในคำว่า
Gank

ยอดเยี่ยม - Ubuntu 18.04.1 LTS
Salathiel Genèse

สำหรับการแข่งขันกรณีตายใช้เช่น-i หากต้องการตรวจสอบก่อนและหลังการใช้pkill -fi wine ps uax | grep -i wine
Raven vulcan

207
ps aux | grep -ie amarok | awk '{print $2}' | xargs kill -9 

xargs (1): xargs - สร้างรายการอาร์กิวเมนต์และเรียกใช้ยูทิลิตี้ เป็นประโยชน์เมื่อคุณต้องการที่จะท่อในการขัดแย้งเพื่อสิ่งที่ต้องการkillหรือlsหรืออื่น ๆ


3
คะแนนสำหรับการกล่าวถึง xargs - สิ่ง pgrep / pkill ทั้งหมดนี้เป็นสิ่งที่ดีมาก แต่ xargs เป็นเครื่องมือสำหรับใช้งานทั่วไปและเป็นมาตรฐานสำหรับทุก linux / unix
chrisdowney

4
"kill: ไม่มีกระบวนการดังกล่าว"
Cerin

3
Cerin นั้นเป็นเพราะมันพยายามฆ่ากระบวนการ grep เช่นกันซึ่งเสร็จสิ้นแล้ว มันควรจะดี
Costi Muraru

6
มีเคล็ดลับเล็กน้อยในการหลีกเลี่ยงกระบวนการ grep: ps aux | grep -ie [a] marok | awk '{พิมพ์ $ 2}' | xargs kill -9
RCross

8
คุณยังสามารถเพิ่มการเรียก grep อีกครั้งเพื่อกรอง grep (ฉันพบว่าการอ่าน / จดจำง่ายขึ้น) ps aux | grep -ie amarok | grep -v grep | awk '{print $2}' | xargs kill -9 ( grep -vย่อมาจากgrep --invert)
driftcatcher

47

ใช้ pgrep

kill -9 $(pgrep amarok)

26
แม้แต่ผู้ที่สง่างาม:pkill -9 amarok
เกล็นแจ็คแมน

1
pkill จัดการส่วน "ทุกกระบวนการที่มีคำว่า <word>" โดยไม่ต้องสร้างท่อหรือกระบวนการมากขึ้น ดูตัวเลือก -f สำหรับการค้นหาชื่อกระบวนการแบบเต็มเพื่อกำจัดความต้องการ pgrep
Tim Bielawa

2
ระวังว่า pkill โดยค่าเริ่มต้นอนุญาตการจับคู่บางส่วนกับชื่อกระบวนการ คำสั่งนี้จะฆ่า amarok2 ด้วยถ้ามีอยู่ ใช้ -x หรือ -f หากคุณต้องการระบุชื่อที่แน่นอน
user79878

มันจะล้มเหลวหากไม่ตรงกับ pgrep
alfredocambera

สำหรับการจับคู่ชื่อเต็มkill -9 $(pgrep -f amarok)
cinatic

27

วิธีที่ปลอดภัยในการทำเช่นนี้คือ:

pkill -f amarok

1
เพื่อเพิ่มสิ่งนี้ฉันเพิ่ม-lธง จริง ๆ แล้วฉันก็ใช้นามแฝงpkillเพื่อpkill -flให้ฉันสามารถเรียกใช้บางสิ่งบางอย่างpkill jbossและมันจะคายกระบวนการที่เพิ่งฆ่า
nland

มันจะฆ่าamarokxกระบวนการด้วยหรือไม่ ฉัน pkill vi มันฆ่า supervisorctlซึ่งมี `vi 'ในคำว่า
Gank

สิ่งนี้แตกต่างจากคำตอบด้านบน (ของทิม) อย่างไร เพียงแค่ตรงกับชื่อตัวอย่างมิฉะนั้นจะดูเหมือนกัน @ndland pkill: invalid option -- 'l'- pkill จาก procps-ng 3.3.12
Xen2050

18

ฉันคิดว่าคำสั่ง killall นี้เป็นสิ่งที่คุณต้องการ คำสั่งถูกอธิบายว่าเป็น "กระบวนการฆ่าตามชื่อ" มันใช้งานง่ายตัวอย่างเช่น

killall chrome

คำสั่งนี้จะฆ่ากระบวนการทั้งหมดของ Chrome นี่คือลิงค์เกี่ยวกับคำสั่ง killall

http://linux.about.com/library/cmd/blcmdl1_killall.htm

หวังว่าคำสั่งนี้จะช่วยคุณได้


ตรงกับชื่อเท่านั้นไม่ใช่บรรทัดคำสั่งแบบเต็ม ไม่แน่นอนเช่นเดียวกับการค้นหาps auxของเอาท์พุท
Xen2050

12

pkill -x ตรงกับชื่อกระบวนการทั้งหมด

pkill -x amarok

pkill -f คล้ายกัน แต่อนุญาตให้ใช้รูปแบบนิพจน์ทั่วไป

โปรดทราบว่า pkill ที่ไม่มีพารามิเตอร์อื่น ๆ (เช่น -x, -f) จะอนุญาตการจับคู่บางส่วนในชื่อกระบวนการ ดังนั้น "pkill amarok" จะฆ่า amarok, amarok Banan, Bananaamarok เป็นต้น

ฉันหวังว่า -x เป็นพฤติกรรมเริ่มต้น!


มันจะฆ่าamarokxกระบวนการด้วยหรือไม่ ฉัน pkill vi มันฆ่า supervisorctlซึ่งมี `vi 'ในคำว่า
Gank

@Gank ใช่ชื่อกระบวนการใด ๆ ที่มี "amarok" อยู่ในนั้นอยู่ที่ไหนซักแห่ง
user79878

ทำอย่างไรถึงจะฆ่า amarok แทนที่จะเป็น amarokx?
Gank

1
@ Gank, แฟล็ก -x pkill -x amarok
user79878

4

หากคุณต้องการรันเอาต์พุตของคำสั่งคุณสามารถวางไว้ข้างใน$(...)อย่างไรก็ตามสำหรับงานเฉพาะของคุณดูที่คำสั่งkillallและpkill


3

คุณยังสามารถประเมินผลลัพธ์ของคุณเป็นกระบวนการย่อยโดยการล้อมรอบทุกอย่างด้วยการย้อนกลับหรือด้วยการใส่ไว้ใน $ ():

`ps aux | grep -ie amarok | awk '{print "kill -9 " $2}'`

 $(ps aux | grep -ie amarok | awk '{print "kill -9 " $2}')     

3

ลองkill -s 9ps -ef |grep "Nov 11" |grep -v grep | awk '{print $2}'เพื่อฆ่ากระบวนการของวันที่ 11 พฤศจิกายนหรือ kill -s 9 ps -ef |grep amarok|grep -v grep | awk '{print $2}' เพื่อฆ่ากระบวนการที่มีคำว่า amarok


0

อาจเพิ่มคำสั่งลงในไฟล์ที่ปฏิบัติการได้การตั้งค่า + x การอนุญาตแล้วเรียกใช้งาน?

ps aux | grep -ie amarok | awk '{print "kill -9 " $2}' > pk;chmod +x pk;./pk;rm pk

-1

หากคุณใช้ cygwin หรือเชลล์ขนาดเล็กที่ขาดkillallคุณสามารถใช้สคริปต์นี้ได้:

killall.sh - ฆ่าตามชื่อกระบวนการ

#/bin/bash
ps -W | grep "$1" | awk '{print $1}' | xargs kill --

การใช้งาน:

$ killall <process name>

ฉันได้รับkill: invalid argument f
rosstex

1
ลองแทนที่ -f ด้วย -
Tony O'Hagan
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.