共計 2777 個字符,預計需要花費 7 分鐘才能閱讀完成。
這篇文章主要講解了“linux 如何殺進程”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著丸趣 TV 小編的思路慢慢深入,一起來研究和學習“linux 如何殺進程”吧!
常規篇:
首先,用 ps 查看進程,方法如下:
復制代碼 代碼如下:
$ ps -ef
$ 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
此時如果我想殺了火狐的進程就在終端輸入:
復制代碼 代碼如下:
$ kill -s 9 1827
其中 -s 9 制定了傳遞給進程的信號是9,即強制、盡快終止進程。各個終止信號及其作用見附錄。
1827 則是上面 ps 查到的火狐的 pid。
簡單吧,但有個問題,進程少了則無所謂,進程多了,就會覺得痛苦了,無論是 ps -ef 還是 ps -aux,每次都要在一大串進程信息里面查找到要殺的進程,看的眼都花了。
進階篇:
改進1:
把 ps 的查詢結果通過管道給 grep 查找包含特定字符串的進程。管道符“|”用來隔開兩個命令,管道符左邊命令的輸出會作為管道符右邊命令的輸入。
復制代碼 代碼如下:
$ 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
改進 2——使用 pgrep:
一看到 pgrep 首先會想到什么?沒錯,grep!pgrep 的 p 表明了這個命令是專門用于進程查詢的 grep。
復制代碼 代碼如下:
$ pgrep firefox
1827
看到了什么?沒錯火狐的 pid,接下來又要打字了:
$kill -s 9 1827
改進 3——使用 pidof:
看到 pidof 想到啥?沒錯 pid of xx,字面翻譯過來就是 xx 的 pid。
復制代碼 代碼如下:
$ pidof firefox-bin
1827
和 pgrep 相比稍顯不足的是,pidof 必須給出進程的全名。然后就是老生常談:
復制代碼 代碼如下:
$kill -s 9 1827
無論使用 ps 然后慢慢查找進程 pid 還是用 grep 查找包含相應字符串的進程,亦或者用 pgrep 直接查找包含相應字符串的進程pid,然后手動輸入給kill殺掉,都稍顯麻煩。有沒有更方便的方法?有!
改進 4:
復制代碼 代碼如下:
$ps -ef | grep firefox | grep -v grep | cut -c 9-15 | xargs kill -s 9
說明:
“grep firefox”的輸出結果是,所有含有關鍵字“firefox”的進程。
“grep -v grep”是在列出的進程中去除含有關鍵字“grep”的進程。
“cut -c 9-15”是截取輸入行的第 9 個字符到第 15 個字符,而這正好是進程號 pid。
“xargs kill -s 9”中的 xargs 命令是用來把前面命令的輸出結果(pid)作為“kill -s 9”命令的參數,并執行該命令。“kill -s 9”會強行殺掉指定進程。
難道你不想抱怨點什么?沒錯太長了
改進 5:
知道 pgrep 和 pidof 兩個命令,干嘛還要打那么長一串!
復制代碼 代碼如下:
$ pgrep firefox | xargs kill -s 9
改進 6:
復制代碼 代碼如下:
$ ps -ef | grep firefox | awk {print $2} | xargs kill -9
kill: no such process
有一個比較郁悶的地方,進程已經正確找到并且終止了,但是執行完卻提示找不到進程。
其中 awk {print $2} 的作用就是打印(print)出第二列的內容。根據常規篇,可以知道 ps 輸出的第二列正好是 pid。就把進程相應的 pid 通過 xargs 傳遞給 kill 作參數,殺掉對應的進程。
改進 7:
難道每次都要調用 xargs 把 pid 傳遞給 kill?答案是否定的:
復制代碼 代碼如下:
$kill -s 9 `ps -aux | grep firefox | awk {print $2}
改進 8:
沒錯,命令依然有點長,換成 pgrep。
復制代碼 代碼如下:
$kill -s 9 `pgrep firefox`
改進 9——pkill:
看到 pkill 想到了什么?沒錯 pgrep 和 kill!pkill=pgrep+kill。
復制代碼 代碼如下:
$pkill -9 firefox
說明:-9 即發送的信號是 9,pkill 與 kill 在這點的差別是:pkill 無須“s”,終止信號等級直接跟在“-“后面。之前我一直以為是 -s 9,結果每次運行都無法終止進程。
改進 10——killall:
killall 和 pkill 是相似的, 不過如果給出的進程名不完整,killall 會報錯。pkill 或者 pgrep 只要給出進程名的一部分就可以終止進程。
復制代碼 代碼如下:
$killall -9 firefox
感謝各位的閱讀,以上就是“linux 如何殺進程”的內容了,經過本文的學習后,相信大家對 linux 如何殺進程這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是丸趣 TV,丸趣 TV 小編將為大家推送更多相關知識點的文章,歡迎關注!