linux下殺死進(jìn)程(kill)的N種方法

轉(zhuǎn)載一篇,最原始的出處已不可考,望見(jiàn)諒!

常規(guī)篇:

首先,用ps查看進(jìn)程,方法如下:

$ ps -ef

……

smx?????? 1822???? 1? 0 11:38 ???????? 00:00:49 gnome-terminal

smx?????? 1823? 1822? 0 11:38 ???????? 00:00:00 gnome-pty-helper

smx?????? 1824? 1822? 0 11:38 pts/0??? 00:00:02 bash

smx?????? 1827???? 1? 4 11:38 ???????? 00:26:28 /usr/lib/firefox-3.6.18/firefox-bin

smx?????? 1857? 1822? 0 11:38 pts/1??? 00:00:00 bash

smx?????? 1880? 1619? 0 11:38 ???????? 00:00:00 update-notifier

……

smx????? 11946? 1824? 0 21:41 pts/0??? 00:00:00 ps -ef

或者:

$ ps -aux

……

smx?????? 1822? 0.1? 0.8? 58484 18152 ???????? Sl?? 11:38?? 0:49 gnome-terminal

smx?????? 1823? 0.0? 0.0?? 1988?? 712 ???????? S??? 11:38?? 0:00 gnome-pty-helper

smx?????? 1824? 0.0? 0.1?? 6820? 3776 pts/0??? Ss?? 11:38?? 0:02 bash

smx?????? 1827? 4.3? 5.8 398196 119568 ??????? Sl?? 11:38? 26:13 /usr/lib/firefox-3.6.18/firefox-bin

smx?????? 1857? 0.0? 0.1?? 6688? 3644 pts/1??? Ss?? 11:38?? 0:00 bash

smx?????? 1880? 0.0? 0.6? 41536 12620 ???????? S??? 11:38?? 0:00 update-notifier

……

smx????? 11953? 0.0? 0.0?? 2716? 1064 pts/0??? R+?? 21:42?? 0:00 ps -aux

此時(shí)如果我想殺了火狐的進(jìn)程就在終端輸入:

$ kill -s 9 1827

其中-s 9 制定了傳遞給進(jìn)程的信號(hào)是9,即強(qiáng)制、盡快終止進(jìn)程。各個(gè)終止信號(hào)及其作用見(jiàn)附錄。

1827則是上面ps查到的火狐的PID。

簡(jiǎn)單吧,但有個(gè)問(wèn)題,進(jìn)程少了則無(wú)所謂,進(jìn)程多了,就會(huì)覺(jué)得痛苦了,無(wú)論是ps -ef 還是ps -aux,每次都要在一大串進(jìn)程信息里面查找到要?dú)⒌倪M(jìn)程,看的眼都花了。

進(jìn)階篇:

改進(jìn)1:

把ps的查詢結(jié)果通過(guò)管道給grep查找包含特定字符串的進(jìn)程。管道符“|”用來(lái)隔開兩個(gè)命令,管道符左邊命令的輸出會(huì)作為管道符右邊命令的輸入。

$ ps -ef | grep firefox

smx?????? 1827???? 1? 4 11:38 ???????? 00:27:33 /usr/lib/firefox-3.6.18/firefox-bin

smx????? 12029? 1824? 0 21:54 pts/0??? 00:00:00 grep --color=auto firefox

這次就清爽了。然后就是

$kill -s 9 1827

還是嫌打字多?

改進(jìn)2——使用pgrep:

一看到pgrep首先會(huì)想到什么?沒(méi)錯(cuò),grep!pgrep的p表明了這個(gè)命令是專門用于進(jìn)程查詢的grep。

$ pgrep firefox

1827

看到了什么?沒(méi)錯(cuò)火狐的PID,接下來(lái)又要打字了:

$kill -s 9 1827

改進(jìn)3——使用pidof:

看到pidof想到啥?沒(méi)錯(cuò)pid of?xx,字面翻譯過(guò)來(lái)就是 xx的PID。

$ pidof firefox-bin

1827

和pgrep相比稍顯不足的是,pidof必須給出進(jìn)程的全名。然后就是老生常談:

$kill -s 9 1827

無(wú)論使用ps 然后慢慢查找進(jìn)程PID 還是用grep查找包含相應(yīng)字符串的進(jìn)程,亦或者用pgrep直接查找包含相應(yīng)字符串的進(jìn)程PID,然后手動(dòng)輸入給kill殺掉,都稍顯麻煩。有沒(méi)有更方便的方法?有!

改進(jìn)4:

$ps -ef | grep firefox | grep -v grep | cut -c 9-15 | xargs kill -s 9

說(shuō)明:

“grep firefox”的輸出結(jié)果是,所有含有關(guān)鍵字“firefox”的進(jìn)程。

“grep -v grep”是在列出的進(jìn)程中去除含有關(guān)鍵字“grep”的進(jìn)程。

“cut -c 9-15”是截取輸入行的第9個(gè)字符到第15個(gè)字符,而這正好是進(jìn)程號(hào)PID。

“xargs kill -s 9”中的xargs命令是用來(lái)把前面命令的輸出結(jié)果(PID)作為“kill -s 9”命令的參數(shù),并執(zhí)行該命令。“kill -s 9”會(huì)強(qiáng)行殺掉指定進(jìn)程。

難道你不想抱怨點(diǎn)什么?沒(méi)錯(cuò)太長(zhǎng)了

改進(jìn)5:

知道pgrep和pidof兩個(gè)命令,干嘛還要打那么長(zhǎng)一串!

$ pgrep firefox | xargs kill -s 9

改進(jìn)6:

$ ps -ef | grep firefox | awk '{print $2}' | xargs kill -9

kill: No such process

有一個(gè)比較郁悶的地方,進(jìn)程已經(jīng)正確找到并且終止了,但是執(zhí)行完卻提示找不到進(jìn)程。

其中awk '{print $2}' 的作用就是打?。╬rint)出第二列的內(nèi)容。根據(jù)常規(guī)篇,可以知道ps輸出的第二列正好是PID。就把進(jìn)程相應(yīng)的PID通過(guò)xargs傳遞給kill作參數(shù),殺掉對(duì)應(yīng)的進(jìn)程。

改進(jìn)7:

難道每次都要調(diào)用xargs把PID傳遞給kill?答案是否定的:

$kill -s 9 `ps -aux | grep firefox | awk '{print $2}'`

改進(jìn)8:

沒(méi)錯(cuò),命令依然有點(diǎn)長(zhǎng),換成pgrep。

$kill -s 9 `pgrep firefox`

改進(jìn)9——pkill:

看到pkill想到了什么?沒(méi)錯(cuò)pgrep和kill!pkill=pgrep+kill。

$pkill -9 firefox

說(shuō)明:"-9" 即發(fā)送的信號(hào)是9,pkill與kill在這點(diǎn)的差別是:pkill無(wú)須 “s”,終止信號(hào)等級(jí)直接跟在 “-“ 后面。之前我一直以為是 "-s 9",結(jié)果每次運(yùn)行都無(wú)法終止進(jìn)程。

改進(jìn)10——killall:

killall和pkill是相似的,不過(guò)如果給出的進(jìn)程名不完整,killall會(huì)報(bào)錯(cuò)。pkill或者pgrep只要給出進(jìn)程名的一部分就可以終止進(jìn)程。

$killall -9 firefox

附錄:各種信號(hào)及其用途


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 常規(guī)篇: 首先,用ps查看進(jìn)程,方法如下: $ ps -ef …… smx 1822 1 0 11:38 ? 00...
    大福技術(shù)閱讀 4,763評(píng)論 0 2
  • 1) 查看進(jìn)程的方法: ps -ef或者ps aux root 15087 0.0 0.0 0 0 ?...
    依然飯?zhí)?/span>閱讀 7,693評(píng)論 0 2
  • 又來(lái)到了一個(gè)老生常談的問(wèn)題,應(yīng)用層軟件開發(fā)的程序員要不要了解和深入學(xué)習(xí)操作系統(tǒng)呢? 今天就這個(gè)問(wèn)題開始,來(lái)談?wù)劜?..
    tangsl閱讀 4,310評(píng)論 0 23
  • 顯示其他用戶啟動(dòng)的進(jìn)程(a) 查看系統(tǒng)中屬于自己的進(jìn)程(x) 啟動(dòng)這個(gè)進(jìn)程的用戶和它啟動(dòng)的時(shí)間(u) 使用“dat...
    時(shí)光那么涼閱讀 1,519評(píng)論 0 0
  • 夏日的晨風(fēng)———涼爽、輕柔。如戀人穿過(guò)發(fā)絲的手。憑欄獨(dú)立,萬(wàn)物沉寂,如在夢(mèng)境,唯我獨(dú)自默默地舔舐傷口,為了忘卻...
    瀟湘燕子閱讀 561評(píng)論 0 1

友情鏈接更多精彩內(nèi)容