2010-05-05 93 views
39

如何殺死這是在bash運行的進程 - 比如,假設我打開一個文件:殺死在bash的過程

$ gedit中file.txt的

有什麼辦法在命令提示符下關閉它?這個例子相當簡單,因爲我可以關閉窗口,但它似乎有點過時,特別是當我輸錯命令時。

還有什麼辦法來逃避正在運行的可執行文件?這可能有相同的解決方案,但我想我會問。

感謝

+0

這看起來更像是一個shell使用問題,而不是shell編程問題 - 最佳實踐在腳本和交互式用法之間是不同的,後者屬於超級用戶ra而不是SO。 – 2010-05-05 16:46:27

+0

我不明白這應該是如何重複鏈接的問題。這個問題詢問關於殺死在當前終端運行的進程。 「重複」問題詢問如何查找某個任意進程進程的進程ID以進行查殺。 – luator 2017-02-07 14:34:19

回答

33

要中斷它,您可以嘗試按ctrlc發送SIGINT。如果它不能阻止它,你可以嘗試使用kill -9 <pid>殺死它,它發送一個SIGKILL。後者不能被進程本身(被殺的那個)忽略/攔截。

要將活動進程移動到後臺,您可以按ctrlz。該過程被髮送到後臺,並返回到shell提示符。使用fg命令做相反的操作。

+6

我很驚訝沒有人提到過Ctrl-Z或Ctrl-C。 Ctrl-C嚴厲地要求正在運行的程序退出。 Ctrl-Z應該始終在程序上工作,但有些程序會用信號處理程序覆蓋Ctrl-C,而信號處理程序可能並不總是關閉程序。 – 2010-05-05 16:49:07

+3

暫停ctrlz後,您可以用'kill -9%'殺死它。 – luator 2015-09-03 09:18:18

+0

還有一件事要補充:如果這個過程沒有對Ctrl + C(發送SIGINT)做出反應,那麼你可能會更加殘暴,並使用Ctrl + \發送一個SIGQUIT。 – luator 2017-02-07 14:37:18

64

你有多種選擇:

首先,你可以使用kill。但是,您需要使用ps,pidofpgrep可以獲得的流程的PID。

ps -A // to get the pid, can be combined with grep 
-or- 
pidof <name> 
-or- 
pgrep <name> 

kill <pid> 

只知道名字就可以殺死一個進程。使用pkillkillall

pkill <name> 
-or- 
killall <name> 

所有命令都向該進程發送信號。如果這個過程就掛了,這可能是neccessary到sigkill發送給該進程(這是信號數字9,所以下面的例子做同樣的):

pkill -9 <name> 
pkill -SIGKILL <name> 

您可以使用此選項killkillall,太。

閱讀關於controlling processes的文章,以獲取有關過程的更多信息。

+2

另一種選擇是'killall -9 ',或者kill -9''pidof '' – jweyrich 2010-05-05 16:28:43

+0

@jweyrich:謝謝 - 我編輯了我的答案以反映這一點。 – tanascius 2010-05-05 16:37:25

+2

小心'killall'。在Solaris上,'killall'會終止所有活動進程。我建議使用''kill''或''pkill''。 – 2010-05-05 16:43:37

1

您可以使用命令pkill來終止進程。如果你想「玩耍」,你可以使用「pgrep」,它的作用完全相同,但返回的過程而不是殺死它。

pkill具有-f參數,可以讓您匹配整個命令。因此,對於你來說,您可以:pkill的-f「的gedit file.txt的」

8

嘗試kill -9 {processID}

要查找進程ID,您可以使用ps -ef | grep gedit

+6

這對正常進程來說有點苛刻,你最好只在對'正常'kill請求沒有反應的東西上使用它。 – 2010-05-05 16:27:41

+1

也考慮使用pgrep而不是grepping ps - 特別是在編寫腳本時 – 2010-05-05 16:45:24

0

您的意思是,我不清楚「轉義正在運行的可執行文件」,但ctrl-z會將進程置於後臺並將控制權返回給命令行。然後您可以使用fg命令將程序帶回前臺。

4

舊帖子,但我碰到了一個非常類似的問題。一些試驗後,我發現,你可以用一個命令做到這一點:

kill $(ps aux | grep <process_name> | grep -v "grep" | cut -d " " -f2) 

在OP的情況下,<process_name>"gedit file.txt"

+2

雖然看起來不錯,但不起作用。但是這個工作:ps -ef | grep yourproc | awk'{print $ 2}'| xargs kill – Timo 2015-03-08 19:19:19

+1

分離器不好。你應該先調整它。這應該工作:kill -9 $(ps aux | grep「worker-manager-rsync」| grep -v「grep」| tr -s「」| cut -d「」-f 2) – ikken 2017-06-22 15:30:01

+0

works!我只更改最後一位數字 kill $(ps aux | grep | grep -v「grep」| cut -d「」-f3) – 2017-07-11 15:48:58

0

請檢查「頂」命令,然後如果你的腳本或任何正在運行,請注意「PID」

PID USER  PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 
1384 root  20 0 514m 32m 2188 S 0.3 5.4 55:09.88 example 
14490 root  20 0 15140 1216 920 R 0.3 0.2 0:00.02 example2 



kill <you process ID> 

Example : kill 1384 
4

這一個是謹慎的暴力使用:

pkill -9 -e -f processname 

如果你的進程名是「sh」它也會殺死「bash」