Linux系統(tǒng)中kill命令殺死進程常用小技巧分享
Linux系統(tǒng)中kill命令殺死進程小技巧
在Linux的系統(tǒng)中,kill是我們最常見的命令之一。
kill,英語中為殺死的意思,顧名思義,就是用來殺死一些東西的命令,在linux中就是用來殺死系統(tǒng)中的進程。
在Windows系統(tǒng)中,如果應(yīng)用程序無反應(yīng)我們會啟動任務(wù)管理器終止應(yīng)用,而在Linux系統(tǒng)中則使用kill命令,kill命令主要用于強制關(guān)閉進程,下面就介紹一下Linux中kill命令的基礎(chǔ)用法和進階用法。
基礎(chǔ)
一般情況下,想要殺死后臺一個進程,我們通常只需要做兩步:
第一步:找到某個應(yīng)用的進程號
ps -aux | grep 應(yīng)用名稱
或 ps -ef | grep 應(yīng)用名稱
或者 top | grep 應(yīng)用名稱
第二步:殺死進程
正常殺死進程:kill -15 pid號
如殺死上圖中pid為10的進程:kill -15 10
強制殺死進程: kill -9 pid號
注:殺死進程的時候,推薦是正常殺死進程,而不是強制殺死進程。
原理解讀:
Kill命令和信號
當(dāng)你執(zhí)行一個“kill”命令,你實際上發(fā)送了一個信號給系統(tǒng),告訴它去終結(jié)不正常的應(yīng)用??偣灿?0個你可以使用的信號,但是基本上你只需要知道SIGTERM(15)(正常殺死信號)和SIGKILL(9)(強制殺死信號)。
你可以用這個命令看到所有信號的列表:
kill -l
上圖:共有64中信號,每種信號均有名稱和對應(yīng)的信號序列號,當(dāng)想要發(fā)送什么信號給系統(tǒng)的時候,只要告知系統(tǒng)該信號的序列號即可。如想要強制結(jié)束進程,則需要發(fā)送9號信號給系統(tǒng),應(yīng)該是這樣的:kill -9 pid號。
實際中常用的只有9種信號(最常用的只有2中:9 和 15):
- <1> 1 終端斷線
- <2>2 中斷(等同 Ctrl + C)
- <3>3 退出(同 Ctrl + \)
- <4>15 終止(可以使得進程在退出之前清理并釋放資源)
- <5> 9 強制終止
- <6>18 繼續(xù)(與19相反)
- <7>19 暫停(等同 Ctrl + Z)
進階
1 查找進程號的方式進行改進
以查找firefox進程為例:
常規(guī):ps -aux | grep java
進階:pgrep java
或: pidof firefox-bin (不推薦)
解讀:
- pgrep: 這個命令是專門用于進程查詢的grep。
- pidof: 看到pidof想到啥?沒錯pid of xx,字面翻譯過來就是 xx的PID。和pgrep相比稍顯不足的是,pidof必須給出進程的全名。
2 將常規(guī)的兩步殺死進程合并為一步
進階1: kill -s 9 `ps -aux | grep firefox | awk '{print $2}'`
其中awk '{print $2}' 的作用就是打?。╬rint)出第二列的內(nèi)容。根據(jù)常規(guī)篇,可以知道ps輸出的第二列正好是PID。就把進程相應(yīng)的PID通過xargs傳遞給kill作參數(shù),殺掉對應(yīng)的進程。
進階2: pgrep firefox | xargs kill -s 9
“ xargs kill -s 9 ”中的xargs命令是用來把前面命令的輸出結(jié)果(PID)作為“kill -s 9”命令的參數(shù),并執(zhí)行該命令。“kill -s 9”會強行殺掉指定進程。
進階3:kill -s 9 `pgrep firefox`
進階4: pkill -9 firefox
前面三個進階雖然將查找進程和刪除進程合并為一個步驟,但是,仍然是兩個命令,這里采用pkill命令將查找和殺掉進程的兩個命令合并為一個命令了,即:pkill=pgrep + kill,表示找到并殺死進程。
進階5:killall -9 firefox
killall和pkill是相似的,不過如果給出的進程名不完整,killall會報錯。pkill或者pgrep只要給出進程名的一部分就可以終止進程。
3 強制踢掉登陸用戶
有的時候,可能我們的系統(tǒng)中有很多用戶在同時登陸這一臺服務(wù)器,而我們想要踢掉某個不良用戶,就可以執(zhí)行如下操作。
(1)查看用戶登陸信息: who
(2)查看自己的身份(避免把自己踢掉):whoami
(3)踢掉用戶ats
pkill -kill -t pts/2(按終端踢,pts/2為所踢用戶的終端)
或
pkill -u ats(按用戶名踢,ats為用戶名)
kill的注意事項
1.如果kill時,不指定信號就會默認發(fā)送信號15,終止指定進程,使得進程在退出之前清理并釋放資源。
2.使用kill時,root用戶將影響用戶的進程,非root用戶只能影響自己的進程。
3.使用kill時,當(dāng)kill向進程發(fā)送信號,必須是這些進程的主人。如果殺死一個沒有權(quán)限殺死的進程或殺死一個不存在的進程,就會報錯。如下:-bash: kill: (20) - No such process
4.使用kill時,如果成功地發(fā)送了信號,shell會在屏幕上顯示出進程的終止信息。(按下Enter鍵,就會顯示出來)
5.使用kill時,如果使用信號9,使進程強行終止,可能會使數(shù)據(jù)丟失或者終端無法恢復(fù)到正常狀態(tài)。
6.init進程,它是一個由內(nèi)核啟動的用戶級進程,所有進程都是init進程的子孫,init不可殺。
Linux中殺死進程kill和killall命令的區(qū)別
第一種方法
kill [信號代碼] 進程ID
注:信號代碼可以省略;我們常用的信號代碼是 -9 ,表示強制終止。
對于僵尸進程,可以用kill -9 來強制終止退出。
kill 的應(yīng)用,是和ps 或pgrep 命令結(jié)合在一起使用的。
如下:
1 [root@-linux-byx ~]# ps -ef|grep magic_Linux 2 root 13020 1 1 1月16 ? 00:33:35 ./magic_Linux01 3 root 22761 1 1 01:27 ? 00:06:35 ./magic_Linux02 4 root 25279 1 0 1月16 ? 00:16:48 ./magic_Linux03 5 root 27694 1 0 1月16 ? 00:16:48 ./magic_Linux04
kill 命令實例:用kill 殺死 進程 magic_Linux02
[root@-linux-byx ~]# kill -9 22761
與kill命令不同的是,killall 命令可以根據(jù)進程名稱來殺死進程。kill 命令 則先需要找到進程的id。
第二種方法
killall 通過程序的名字,直接殺死所有進程
killall 也和ps或pgrep 結(jié)合使用,比較方便。
如下:
1 [root@-linux-byx ~]# pgrep -l magic_Linux 2 13020 magic_Linux01 3 22761 magic_Linux02 4 25279 magic_Linux03 5 27694 magic_Linux04
killall 命令實例: 用killall 殺死 進程 magic_Linux02
[root@-linux-byx ~]# killall magic_Linux
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
詳解Linux文件中的數(shù)據(jù)是如何被寫進磁盤
Linux 中,我們的每一個進程,打開的每一個文件都要有自己的 struct inode 對象和自己的文件頁緩沖區(qū)(就是所謂的內(nèi)核緩沖區(qū)),本文我們給大家介紹了Linux文件中的數(shù)據(jù)是如何被寫進磁盤,需要的朋友可以參考下2024-05-05Linux查看分區(qū)文件系統(tǒng)類型的方法總結(jié)
這篇文章主要給大家總結(jié)介紹了關(guān)于Linux查看分區(qū)文件系統(tǒng)類型的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用linux系統(tǒng)具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-08-08Linux關(guān)機時執(zhí)行指定腳本功能實現(xiàn)
本篇文章給大家分享了Linux關(guān)機時執(zhí)行指定腳本功能的實現(xiàn)詳解,對此有需要的朋友跟著小編一起學(xué)習(xí)下。2018-03-03Linux磁盤掛載、分區(qū)、擴容操作的實現(xiàn)方法
這篇文章主要介紹了Linux磁盤掛載、分區(qū)、擴容操作的實現(xiàn)方法,詳細的介紹了這些基礎(chǔ)概念及其實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-12-12