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


149

ฉันจะฆ่ากระบวนการทั้งหมดที่ทำงานโดยบัญชีที่ไม่ใช่รูทของตัวเองได้อย่างไร

ฉันมีกระบวนการ smbd ที่กำลังหมุนซึ่งเกิดจากเครื่อง windows ของฉันดังนั้นฉันจึงโทรเข้าไปยังเซิร์ฟเวอร์ linux และฉันต้องการที่จะฆ่ากระบวนการหมุนเหล่านั้น ฉันไม่มีสิทธิ์ในการรีสตาร์ทบริการหรือรีบูตเครื่อง

คำตอบ:


172

หากต้องการฆ่ากระบวนการทั้งหมดที่คุณได้รับอนุญาตให้ฆ่าให้เรียกใช้คำสั่ง

kill -15 -1หรือkill -9 -1ขึ้นอยู่กับพฤติกรรมที่ต้องการ (ใช้man killเพื่อดูรายละเอียด)

หากต้องการฆ่ากระบวนการที่เจาะจงให้พูด firefox เพียงเรียกใช้

pkill firefoxหรือkillall firefoxขึ้นอยู่กับพฤติกรรมที่คุณต้องการ: 'killall' กับ 'pkill' ต่างกันอย่างไร

หากคุณต้องการดูว่ากระบวนการใดกำลังทำงานอยู่ให้ใช้คำสั่ง

ps -ef

หากคุณต้องการค้นหากระบวนการทั้งหมดโดยผู้ใช้ bob สิ่งนี้อาจช่วยได้

pgrep -l -u bob

หรือ

ps -ef | grep bob

4
ฉันจะเริ่มด้วยkill -15 -1และทำต่อไปkill -9 -1หากมีกระบวนการที่ดื้อรั้นและฉันรู้ว่าฉันกำลังทำอะไรอยู่ กระบวนการฆ่าแบบสุ่มที่อาจอยู่ในระหว่างการทำธุรกรรมฐานข้อมูลไม่ใช่สิ่งที่เราควรทำอย่างไม่ตั้งใจตามที่คุณแนะนำ
Simon Richter

กระบวนการของ Firefox ก็มีชื่อว่าfirefox-binเช่นกัน
Simon Richter

ไม่มีคุณสามารถลองใช้killall firefoxและkillall firefox-binและดูว่าอะไรทำงาน ฉันเห็นด้วยกับความคิดเห็นแรกของคุณ
ste_kwr

ขอบคุณ @ste_kwr ทำงานกับคำแนะนำของคุณหลังจากดิ้นรนเป็นเวลาสองวัน ...
Java.beginner

ข้อดีของการไม่ต้องใช้ PID อยู่ในงาน cron ใช้ชื่อผลงานออกมาอย่างหมดจด
SDsolar

56

ใช้sudo kill <pid>หรือsudo killall <process-name>


3
ฉันไม่คิดว่ามันเกี่ยวข้องกับคำถามนี้คุณกำลังใช้ sudo - OP ไม่มีสิทธิ์ดังกล่าวดังที่กล่าวไว้ในคำถาม
pl1nk

OP ไม่มีสิทธิ์โปรดแก้ไขคำตอบของคุณมิฉะนั้นอาจถูกลบหรือแปลงเป็นความคิดเห็นว่า "ไม่ใช่คำตอบ"
ish

หากเขาไม่มีสิทธิ์เขาจะต้องฆ่า <pid> หรือ killall <process-name> ฉันเพิ่งใช้มันในบัญชีที่ไม่ใช่รูทฉันจะไม่สามารถทำได้ถ้ามันไม่ใช่คำตอบนี้ .
Shailyn Ortiz

20

ลองทำอะไรมากกว่านี้:

sudo apt-get install htop 

topคำสั่งเป็นวิธีแบบดั้งเดิมเพื่อดูการใช้ทรัพยากรของระบบของคุณและดูกระบวนการที่มีการขึ้นทรัพยากรระบบมากที่สุด ด้านบนจะแสดงรายการของกระบวนการที่มีการใช้ CPU มากที่สุดที่ด้านบน

htopแสดงข้อมูลเดียวกันด้วยโครงร่างที่เข้าใจง่าย นอกจากนี้ยังให้คุณเลือกกระบวนการด้วยปุ่มลูกศรและดำเนินการต่าง ๆ เช่นฆ่าพวกมันหรือเปลี่ยนลำดับความสำคัญด้วยFปุ่ม


16

คุณสามารถใช้ได้

ps -ax | grep application name 

หากการค้นหาประเภท firefox ในเทอร์มินัลเช่นps -ax | grep firefoxนี้จะแสดงรหัสกระบวนการของแอปพลิเคชันที่เกี่ยวข้อง คุณสามารถหยุดแอปพลิเคชันนั้นโดยkillคำสั่งหากกระบวนการ id = 1317

kill -9 1317

13

xkillผมจะใช้ ป้อนxkillในเทอร์มินัลและคลิกในหน้าต่างหรือป้อนxkillและ ID กระบวนการและมันจะถูกยกเลิก

ค้นหาข้อมูลเพิ่มเติมเกี่ยวxkillกับx.org


1
ใช้ที่สองในความถี่หลังจาก pkill nd รักมัน +1
Sergiy Kolodyazhnyy

xkill ไม่ทำงานในกรณีนี้ ...
PythoNic

@ PythoNic ในกรณีนี้คืออะไร?
Alvar

1
เขาต้องการที่จะฆ่ากระบวนการที่ไม่ใช่หน้าต่างซึ่งไม่เกี่ยวข้องกับเซิร์ฟเวอร์ X เพราะมันดูเหมือนว่าสำหรับฉัน ... (อย่างไรก็ตามเป็นเครื่องมือที่ดี)
PythoNic

9

หากต้องการพยายามฆ่ากระบวนการทั้งหมดที่ผู้ใช้เป็นเจ้าของให้usernameเรียกใช้:

pkill -U username

7

ฉันจะแบ่งปัญหาของคุณออกเป็น 2 ส่วน:

1) ฉันจะค้นหากระบวนการที่เริ่มต้นโดยฉันได้อย่างไร เรียกใช้สิ่งนี้:

ps -u `whoami`

whoamiเป็นเพียงในกรณีที่คุณไม่ทราบชื่อของบัญชีที่คุณกำลังใช้มิฉะนั้นเพียงแค่พิมพ์ชื่อของบัญชีโดยไม่มีคำพูดหลัง

นี่จะแสดงรายการกระบวนการทั้งหมดที่บัญชีของคุณสามารถลบได้

2) psคำสั่งจะแสดงหมายเลขกระบวนการ, TTY, เวลาและ CMD ID กระบวนการคือคอลัมน์แรก ใช้หมายเลขนั้นเพื่อฆ่ากระบวนการ ระมัดระวังในขณะที่ฆ่ากระบวนการ คุณอาจทำลายบางอย่างถ้าคุณฆ่ากระบวนการที่ผิด เพื่อฆ่ากระบวนการคุณจะใช้killคำสั่งซึ่งจะส่งสัญญาณไปยังกระบวนการ สัญญาณบ่งชี้ว่ากระบวนการควรทำอย่างไร ตัวอย่างเช่นการส่ง-1ไปยังกระบวนการจะขอให้โหลดไฟล์การกำหนดค่าอีกครั้ง การส่ง a -2เทียบเท่ากับการกด Control + C ในกระบวนการนั้น -9จะทำให้เคอร์เนลละทิ้งกระบวนการโดยไม่ต้องสื่อสารกับกระบวนการ

สมมติว่า ps -u whoamiส่งคืนสิ่งที่ต้องการ

  PID TTY          TIME CMD
 4333 pts/1    00:00:00 fish
 4335 ?        00:00:00 fishd
 4816 ?        00:00:00 intellij
 4868 ?        00:50:42 java
 4939 ?        00:00:19 fsnotifier64
 7667 ?        02:49:08 firefox
 7698 ?        00:00:00 unity-webapps-s

และคุณต้องการที่จะฆ่าfirefoxกระบวนการด้วยรหัสกระบวนการของมันแล้วคุณจะทำ:

kill -1 7667

จากนั้นคุณจะเรียกใช้psคำสั่งเดิมอีกครั้งและตรวจสอบว่ากระบวนการนั้นยังทำงานอยู่หรือไม่ หากยังคงทำงานอยู่ให้ทำ

kill -2 7667

-9วิธีการทำงานของคุณขึ้นไป

kill <level> -1จะฆ่ากระบวนการทั้งหมดที่ตั้งขึ้นโดยบัญชีของคุณป้อน เช่นเดียวกับก่อน: -9วิธีการทำงานของคุณขึ้นไป

หากคุณรู้ชื่อของกระบวนการที่คุณสามารถไปkillall <processname>ได้นั่นคือสิ่งที่คุณพยายามฆ่า ตัวอย่างเช่น: killall fish(ในแง่นี้ปลาคือ Friendly Interactive SHell)

เอกสารสำหรับkillallสามารถพบได้ที่นี่: http://manpages.ubuntu.com/manpages/hardy/man1/killall.1.html


3

ด้วยแอพพลิเคชั่นนี้คุณสามารถดูรายการโปรแกรม

ติดตั้ง htop

sudo apt-get install htop

เพื่อดูกระบวนการและขั้นตอนการฆ่าคุณสามารถติดตั้งและเพียงแค่ลบ

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


2

... กระบวนการทั้งหมดใน Linux ตอบสนองต่อสัญญาณ สัญญาณเป็นวิธีบอกระดับของระบบโปรแกรมเพื่อยกเลิกหรือแก้ไขพฤติกรรมของพวกเขา

วิธีการส่งสัญญาณกระบวนการโดย PID

วิธีทั่วไปในการส่งสัญญาณไปยังโปรแกรมคือคำสั่ง kill

ตามที่คุณคาดหวังการใช้งานเริ่มต้นของยูทิลิตี้นี้คือพยายามที่จะฆ่ากระบวนการ:

kill PID_of_target_process

สิ่งนี้จะส่งสัญญาณ TERM ไปยังกระบวนการ สัญญาณ TERM จะบอกกระบวนการให้ยุติ สิ่งนี้ทำให้โปรแกรมสามารถดำเนินการทำความสะอาดและออกได้อย่างราบรื่น

หากโปรแกรมทำงานผิดปกติและไม่ออกเมื่อได้รับสัญญาณ TERM เราสามารถเพิ่มสัญญาณโดยส่งสัญญาณ KILL:

kill -KILL PID_of_target_process

นี่เป็นสัญญาณพิเศษที่ไม่ได้ส่งไปยังโปรแกรม

แต่จะมอบให้กับเคอร์เนลระบบปฏิบัติการซึ่งจะปิดกระบวนการ ใช้เพื่อข้ามโปรแกรมที่ไม่สนใจสัญญาณที่ส่งไป ...


2

ฉันเขียนสคริปต์เล็กน้อยที่ฉันเขียนเพื่อฆ่า Skype (ในกรณีของฉัน):

kill -s 9 `ps aux | grep skype | head -n 1 | cut -f4 -d" "`

แต่ฉันพบว่าเท่าที่ทำงานแล้วมันไม่ทำงานในวันถัดไปเพราะ pid มีความยาวแตกต่างกันและมีจำนวนช่องว่างที่แตกต่างกัน

จากนั้นฉันก็เจอเว็บไซต์นี้และลอง

pgrep -l -u justin

ซึ่งอำนวยความสะดวกในกระบวนการผลลัพธ์ในรูปแบบ

[pid] [name]

ดังนั้นฉันปรับรหัสของฉันในสคริปต์นี้:

kill -s 9 `pgrep -l -u justin | grep skype | cut -f1 -d" "`

สิ่งนี้ทำคือไพพ์ของกระบวนการjustinทั้งหมดกำลังทำงาน (ซึ่งสามารถเปลี่ยนเป็นชื่อผู้ใช้ใด ๆ ) grepซึ่งจะค้นหาskype(ซึ่งสามารถเปลี่ยนเป็นกระบวนการของคุณ) แล้วไพพ์ไลน์ที่บรรทัดcutนั้นซึ่งจะอ่านเฉพาะ PID และใช้ในที่สุด PID ในkillคำสั่งเพื่อฆ่ามัน


คุณน่าจะโยน-lและวิ่งpgrep -u justin skypeและฆ่า: pkill -u justin skype(หรือpkill -KILL -u justin skypeส่ง SIGKILL)
muru

นี่คือวิธี Unix แน่นอน ทำได้ดีทั้งคุณ ฉันจะใช้อันนี้
SDsolar

1

ต่อไปนี้เป็นสคริปต์ python ที่เรียบง่ายที่ฉันเขียนไว้ว่า killProcess.py ซึ่งจะยอมรับสิ่งใดก็ได้เป็นอินพุตและทำลายสิ่งนั้น

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

โปรดตั้งชื่อไฟล์ "killProcess.py" จากนั้นเพิ่มชื่อของสคริปต์ที่คุณต้องการหยุด เช่น python killProcess.py runnablePoller.py จะทำการฆ่าไฟล์ runnablePoller.py

import os;
import sys;
for arg in sys.argv:
    if(arg!="killProcess.py"):
        process=arg;
        print(process);
processes =os.popen("ps -ef | grep "+process).read();
processes=processes.split("\n");
processes=processes[0].split(" ");
#print(processes);
for p in processes:
    try:
        pid=int(p);
        print(pid); 
        break;
    except:
        continue;

os.system("kill "+str(pid));

0

ฉันใช้ขั้นตอนต่อไปนี้เพื่อฆ่ากระบวนการใน Ubuntu ::

ขั้นตอนที่ 1: รับ pid ของกระบวนการโดยใช้ grep หรือคุณสามารถใช้ -C ยัง ::

ps aux | -C 'filename'

หรือ

ps -ef | -C 'filename'

หรือ

ps aux | grep 'filename'

หรือ

ps -ef | grep 'filename' 

ขั้นตอนที่ 2: บันทึกหมายเลข pid

ขั้นตอนที่ 3: ใช้คำสั่ง 'kill' พร้อมหมายเลข pid ดังนี้:

kill pidnumber

0

Ctrl+ Alt+ Deleteสามารถตั้งค่าเพื่อให้คุณสามารถเข้าถึงการจัดการงานจากที่มันง่ายที่จะฆ่ากระบวนการด้วยการคลิกคู่และสำหรับฉันความต้องการน้อยสำหรับคำสั่งที่อาจจะสร้างความเสียหายหากทำไม่ถูกต้องจดจำ:

http://ubuntuhandbook.org/index.php/2013/07/use-ctrl-alt-del-task-manager-ubuntu/

https://www.itsmarttricks.com/a-guide-to-kill-pkill-and-killall-commands-to-stop-the-process-in-linux-kill-process-linux/

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