centos 杀死进程命令kill
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
Linux 系統(tǒng)中時(shí)刻運(yùn)行著許多進(jìn)程,如果能夠合理地管理它們,則可以優(yōu)化系統(tǒng)的性能。在Linux 系統(tǒng)中,有 5 種常見的進(jìn)程狀態(tài),分別為運(yùn)行、中斷、不可中斷、僵死與停止,其各自
含義如下所示。
? R (運(yùn)行)? :? ?進(jìn)程正在運(yùn)行或在運(yùn)行隊(duì)列中等待。
? S(中斷)? ? :? 進(jìn)程處于休眠中,當(dāng)某個(gè)條件形成后或者接收到信號(hào)時(shí),則脫離該
狀態(tài)。
?D(不可中斷)? ?:? 進(jìn)程不響應(yīng)系統(tǒng)異步信號(hào),即便用 kill 命令也不能將其中斷。
? Z(僵尸)? : 進(jìn)程已經(jīng)終止,但進(jìn)程描述符依然存在, 直到父進(jìn)程調(diào)用 wait4()系統(tǒng)函數(shù)
后將進(jìn)程釋放。
?? T(停止) : 進(jìn)程收到停止信號(hào)后停止運(yùn)行。
?
kill命令用于終止指定的進(jìn)程,其工作原理是通過向進(jìn)程發(fā)送指定的信號(hào)。
基本格式 kill [params] [pid]
常用的是:
?kill -9 pid //強(qiáng)制終止
-
-1?Hup 終端斷線
-
-2?INT 中斷(同Ctrl+c)
-
-3?QUIT 退出(同Ctrl+\)
-
-15?TERM 終止,是默認(rèn)的信號(hào),如果應(yīng)用本身會(huì)捕獲該信號(hào),則不能終止
-
-9?KILL 強(qiáng)制終止
-
-18?CONT 繼續(xù)
-
-19?STOP 暫停(同Ctrl+z)
查看 httpd 進(jìn)程?
1、ps aux |grep httpd ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#-aux 顯示所有狀態(tài)
[root@localhost init.d]# ps aux |grep httpd
root? ?? ?2091??0.0??0.1? ?5488??2832 ?? ?? ???Ss? ?17:19? ?0:00 /web/apache//bin/httpd -k restart
我們可以用??kill -9 加進(jìn)程ID? ?如下
[root@moyea309 init.d]# kill -9 2091
注意:kill 只能殺死處于用戶狀態(tài)的進(jìn)程。
kill 命令用于終止進(jìn)程,-9 表示強(qiáng)迫進(jìn)程立即停止,例如: kill -9 [PID]
-1表示讓一個(gè)進(jìn)程不用重啟,就可以重讀其配置文件,并讓新的配置信息生效;
-2表示中斷一個(gè)進(jìn)程
-9表示:殺死一個(gè)進(jìn)程
-15表示終止一個(gè)進(jìn)程
指定一個(gè)信號(hào) :
? ? ? ? ? 信號(hào)號(hào)碼 : kill -1
? ? ? ? ?信號(hào)名稱 : kill -SIGKILL
? ? ? ? ?信號(hào)名稱簡(jiǎn)稱 :kill-KILL?
?
常見查看端口的命令:
查看進(jìn)程占用的端口,可以使用如下命令:
netstat -apn ?| grep 9999
?
查看程序占用的端口
ps aux | grep 23275
查看進(jìn)程:
ps -ef | grep java,表示查看所有進(jìn)程里 CMD 是 java 的進(jìn)程信息
ps -aux | grep java,-aux 顯示所有狀態(tài)
殺了進(jìn)程就在終端輸入:
$ kill -s 9 1827
?
在終端中執(zhí)行ps aux,
各列輸出字段的含義:
?
USER????????進(jìn)程所有者
PID?????????進(jìn)程ID
PPID?????????父進(jìn)程
%CPU???????CPU占用率
%MEM?????內(nèi)存占用率
NI??????????進(jìn)程優(yōu)先級(jí)。數(shù)值越大,占用CPU時(shí)間越少
VSZ??????????進(jìn)程虛擬大小
RSS??????????頁面文件占用
TTY?????????終端ID
STAT?????????進(jìn)程狀態(tài)
+---D???不可中斷????Uninterruptible sleep (usually IO)
+---R???正在運(yùn)行,或在隊(duì)列中的進(jìn)程
+---S???處于休眠狀態(tài)
+---T???停止或被追蹤
+---Z???僵尸進(jìn)程
+---W???進(jìn)入內(nèi)存交換(從內(nèi)核2.6開始無效)
+---X???死掉的進(jìn)程
+---<???高優(yōu)先級(jí)
+---N???低優(yōu)先級(jí)
+---L???有些頁被鎖進(jìn)內(nèi)存
+---s???包含子進(jìn)程
+---+???位于后臺(tái)的進(jìn)程組;
+---l???多線程,克隆線程?multi-threaded (using CLONE_THREAD, like NPTL pthreads do)
?
殺死僵尸進(jìn)程
用top查看系統(tǒng)中的僵尸進(jìn)程情況?
再看看這些僵尸是什么程序來的 ,用ps和grep命令尋找僵尸進(jìn)程
ps -A -o stat,ppid,pid,cmd | grep -e '^[Zz]'命令注解:
-A 參數(shù)列出所有進(jìn)程
-o 自定義輸出字段 我們?cè)O(shè)定顯示字段為 stat(狀態(tài)), ppid(進(jìn)程父id), pid(進(jìn)程id),cmd(命令)這四個(gè)參數(shù)
?
因?yàn)闋顟B(tài)為 z或者Z的進(jìn)程為僵尸進(jìn)程,所以我們使用grep抓取stat狀態(tài)為zZ進(jìn)程
Z+:表示正在運(yùn)行的僵尸進(jìn)程
?
因?yàn)闋顟B(tài)為 z或者Z 的進(jìn)程為僵尸進(jìn)程,所以我們使用grep抓取stat狀態(tài)為zZ進(jìn)程?
運(yùn)行結(jié)果參考如下?
?
這里一共出現(xiàn)了3個(gè)僵死進(jìn)程,我們需要把它們一個(gè)個(gè)都干掉,執(zhí)行下面的命令
kill -9 21320
或者
kill -HUP 21320來殺掉這個(gè)僵尸進(jìn)程
這樣處理的速度有點(diǎn)慢,直接來個(gè)快速干掉所有僵尸進(jìn)程的命令?
再次運(yùn)行ps -A -ostat,ppid,pid,cmd | grep -e '^[Zz]'來確認(rèn)是否將僵尸進(jìn)程殺死,再查看,僵尸進(jìn)程沒有了!?
如果kill 子進(jìn)程的無效,可以嘗試kill 其父進(jìn)程來解決問題,例如上面例子父進(jìn)程pid是 12334,那么我們就運(yùn)行
kill -HUP 12334檢查當(dāng)前僵尸進(jìn)程信息
ps -ef | grep defunct | grep -v grep | wc -l查看TOP前兩行信息
top | head -2直接殺死進(jìn)程
ps -ef | grep defunct | grep -v grep | awk '{print "kill -18 " $3}'如果父進(jìn)程也殺不死,那就只能執(zhí)行重啟了
?
kill后出現(xiàn)問題的解決辦法:
場(chǎng)景:jps 報(bào)process information unavailable解決方法
jps時(shí)出現(xiàn)如下信息:
22162– process information unavailable
解決辦法:
進(jìn)入tmp目錄,
cd /tmp
刪除該目錄下
名稱為hsperfdata_{username}的文件夾?
?
然后jps,清凈了。
?
沒有Killall:
yum install psmisc
?
?killall 命令終止進(jìn)程的 8 大用法
kill?命傳遞一個(gè)PID來殺死進(jìn)程;pkill?命令使用一個(gè)正則表達(dá)式作為輸入,所以和該模式匹配的進(jìn)程都被殺死。
killall?,默認(rèn)情況下,它精確地匹配參數(shù)名,然后殺死匹配進(jìn)程。
默認(rèn)情況下,killall 命令將向一個(gè)/組進(jìn)程發(fā)送一個(gè)?SIGTERM?信號(hào),但是,也可以通過參數(shù)發(fā)送一個(gè)指定的信號(hào)。
1. 基本用法
假如我們 3 個(gè)進(jìn)程在運(yùn)行,分別是?hello1, hello2, hello3?,現(xiàn)在我們想殺死 hello1 進(jìn)程,可以直接使用如下方式:
killall?hello1運(yùn)行的結(jié)果如下:
root@centos?test]$?ps?aux?|?grep?hello alvin????12061??0.0??0.0???4152???344?pts/0????S????14:41???0:00?./hello1 alvin????12074??0.0??0.0???4152???344?pts/0????S????14:41???0:00?./hello2 alvin????12084??0.0??0.0???4152???340?pts/0????S????14:41???0:00?./hello3 alvin????12089??0.0??0.0?112648???964?pts/0????R+???14:41???0:00?grep?--color=auto?hello [root@centos?test]$?killall?hello1 [1]???Terminated??????????????./hello1 [root@centos?test]$?ps?aux?|?grep?hello alvin????12074??0.0??0.0???4152???344?pts/0????S????14:41???0:00?./hello2 alvin????12084??0.0??0.0???4152???340?pts/0????S????14:41???0:00?./hello3 alvin????12170??0.0??0.0?112648???964?pts/0????R+???14:42???0:00?grep?--color=auto?hello可以看到,hello1 進(jìn)程已經(jīng)被殺死了。
剩下的 hello2 和 hello3 進(jìn)程,我們想一次性殺死他們,也就是批量殺死進(jìn)程,可以如下操作:
[root@centos?test]$?killall?hello* hello:?no?process?found hello1:?no?process?found hello.c:?no?process?found [2]-??Terminated??????????????./hello2 [3]+??Terminated??????????????./hello3如此,以 hello 開頭的進(jìn)程全部被干掉。
2. 終止某個(gè)用戶所運(yùn)行的進(jìn)程
可以殺死以滿足某個(gè)正則表達(dá)式的一組進(jìn)程,同樣的,我們也可以殺死某個(gè)用戶運(yùn)行的所有進(jìn)程。
比如,用戶 harry 現(xiàn)在運(yùn)行如下幾個(gè)進(jìn)程:
[root@centos?test]$?ps?aux?|?grep?harry root?????13675??0.0??0.2?148236??5584??????????Ss???14:55???0:00?sshd:?harry?[priv] harry????13677??0.0??0.1?148236??2944??????????S????14:55???0:00?sshd:?harry@pts/1 root?????13678??0.0??0.2?148236??5444??????????Ss???14:55???0:00?sshd:?harry?[priv] harry????13680??0.0??0.1?148236??2252??????????S????14:55???0:00?sshd:?harry@notty harry????13681??0.0??0.1??53228??2168??????????Ss???14:55???0:00?/usr/libexec/openssh/sftp-server harry????13694??0.0??0.1?116436??3252?pts/1????Ss+??14:55???0:00?-bash harry????13948??0.0??0.0???4152???344?pts/1????S????14:57???0:00?./hello1 harry????13952??0.0??0.0???4152???344?pts/1????S????14:57???0:00?./hello2 harry????13959??0.0??0.0???4152???344?pts/1????S????14:57???0:00?./hello3 alvin????14005??0.0??0.0?112648???964?pts/0????R+???14:58???0:00?grep?--color=auto?harry我們現(xiàn)在想殺死 harry 所運(yùn)行的所有進(jìn)程,可以以如下方式操作:
killall?-u?harry運(yùn)行結(jié)果如下:
[root@centos?test]$killall?-u?harry [root@centos?test]$?ps?aux?|?grep?harry alvin????14040??0.0??0.0?112648???964?pts/0????R+???14:58???0:00?grep?--color=auto?harry但是,這個(gè)選項(xiàng)要慎用,因?yàn)樗鼤?huì)把該用戶所有進(jìn)程,包括終端進(jìn)程,全部殺死,將導(dǎo)致該用戶直接退出。所以,如果不想挨揍的話不要輕意嘗試這個(gè)選項(xiàng)。
3. 終于時(shí)間的方式終止進(jìn)程
假如我們現(xiàn)在運(yùn)行了很多程序,我們只想殺死運(yùn)行時(shí)間超過 5h 的進(jìn)程,那么可以使用?-o?選項(xiàng),其中 o 代表 older 如下:
killall?-o?5h同樣地,如果你想殺死進(jìn)行時(shí)間小于 4h 的進(jìn)程,那么可以使用?-y?選項(xiàng),其中 y 代表 younger ,如下:
killall?-y?4h這兩個(gè)選項(xiàng)同樣非常粗暴,也會(huì)把終端退出,所以先不演示了。
4. 忽略大小寫
默認(rèn)情況下,killall 命令是大小寫敏感的,所以我們?nèi)绻麑戝e(cuò)大小寫,將無法正確殺死進(jìn)程。
[alvin@VM_0_16_centos?test]$?killall?HELLO1 TEST1:?no?process?found如果我們想忽略大小寫,可以加上?-I?(大寫字母 i )選項(xiàng)。
[root@centos?test]$?killall?-I?HELLO1 [1]???Terminated??????????????./hello15. 關(guān)閉命令執(zhí)行回顯
默認(rèn)情況下,killall 會(huì)告訴你命令執(zhí)行情況,但是,我們?nèi)绻魂P(guān)心它的執(zhí)行結(jié)果,只想讓它靜默執(zhí)行,該怎么辦?只需加上?-q?選項(xiàng)即可,其中 q 表示 quite , 如下:
[root@centos?test]$?killall?HELLO2 HELLO2:?no?process?found [root@centos?test]$?killall?-q?HELLO26. 列出所有支持的信號(hào)
如前文所述,默認(rèn)情況下,killall 命令將發(fā)送 SIGTERM 信號(hào),那么,安可以發(fā)送其它信號(hào)嗎?當(dāng)然是可以的。可以使用?-l?選項(xiàng)查看 killall 所支持的所有信號(hào):
[root@centos?test]$?killall?-l HUP?INT?QUIT?ILL?TRAP?ABRT?IOT?BUS?FPE?KILL?USR1?SEGV?USR2?PIPE?ALRM?TERM STKFLT?CHLD?CONT?STOP?TSTP?TTIN?TTOU?URG?XCPU?XFSZ?VTALRM?PROF?WINCH?IO?PWR?SYS UNUSED你可以使用?-s?選項(xiàng)(后面跟一個(gè)信號(hào)名)來向一個(gè)進(jìn)程發(fā)送特殊信號(hào)。
7. 交互式操作
如果你在殺死多個(gè)進(jìn)程時(shí)不太放心,擔(dān)心把不該殺死的進(jìn)程給殺死了,那么你可以使用?-i?選項(xiàng),這樣就可以自由決定哪些進(jìn)程應(yīng)該被殺死,哪些進(jìn)程應(yīng)該被保留。
[root@centos?test]$?killall?-i?hello* Kill?hello2(13825)???(y/N)?y Kill?hello3(13831)???(y/N)?N hello:?no?process?found hello1:?no?process?found hello3:?no?process?found hello.c:?no?process?found [2]-??Terminated??????????????./hello28. 等待直到某個(gè)進(jìn)程被終止
當(dāng)一個(gè)信號(hào)被發(fā)送至某個(gè)進(jìn)程,如果你想確定該進(jìn)程已經(jīng)被殺死了才返回執(zhí)行結(jié)果,可以使用?-w?選項(xiàng),其中 w 代表 wait ,如下:
[alvin@VM_0_16_centos?test]$?killall?-w?hello1 [4]+??Terminated??????????????./hello1這里好像看不出什么效果,但實(shí)際執(zhí)行的時(shí)候,可以發(fā)現(xiàn)執(zhí)行結(jié)果會(huì)在一兩秒后出現(xiàn),而不加 -w 選項(xiàng)的話,執(zhí)行結(jié)果馬上就顯示。
?
?
?
?
?
參考鏈接 :
https://mp.weixin.qq.com/s/UhzFTQM83gTshPDSTxo9LQ
轉(zhuǎn)載于:https://my.oschina.net/u/3803405/blog/1826863
總結(jié)
以上是生活随笔為你收集整理的centos 杀死进程命令kill的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。