共計 2485 個字符,預計需要花費 7 分鐘才能閱讀完成。
本篇內容介紹了“linux 殺死進程命令 kill 如何使用”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓丸趣 TV 小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
在 linux 中,kill 命令是用來殺死系統中的進程,使用步驟:1、利用 ps、top、pgrep 等命令獲取指定應用的進程號;2、使用 kill 命令根據進程號殺死該進程,語法“kill -15 進程號”或“kill -9 進程號”。執行原理:kill 命令會向操作系統內核發送一個信號(多是終止信號)和目標進程的 PID 號,然后系統內核根據收到的信號類型,對指定進程進行相應的操作。
在 Linux 的系統中,kill 是我們最常見的命令之一。
kill,英語中為殺死的意思,顧名思義,就是用來殺死一些東西的命令,在 linux 中就是用來殺死系統中的進程。
kill 命令的執行原理是這樣的,kill 命令會向操作系統內核發送一個信號(多是終止信號)和目標進程的 PID,然后系統內核根據收到的信號類型,對指定進程進行相應的操作。
在 Windows 系統中,如果應用程序無反應我們會啟動任務管理器終止應用,而在 Linux 系統中則使用 kill 命令,kill 命令主要用于強制關閉進程,下面就介紹一下 Linux 中 kill 命令的基礎用法和進階用法。
基礎用法
殺死后臺進程的步驟:
一般情況下,想要殺死后臺一個進程,我們通常只需要做兩步:
第一步:找到某個應用的進程號:
ps -aux | grep 應用名稱
或 ps -ef | grep 應用名稱
或者 top | grep 應用名稱
第二步:殺死進程
正常殺死進程:
kill -15 pid 號
如殺死上圖中 pid 為 10 的進程:kill -15 10
強制殺死進程:
kill -9 pid 號
注:殺死進程的時候,推薦是正常殺死進程,而不是強制殺死進程。
原理解讀:Kill 命令和信號
當你執行一個“kill”命令,你實際上發送了一個信號給系統,告訴它去終結不正常的應用。總共有 60 個你可以使用的信號,但是基本上你只需要知道 SIGTERM(15)(正常殺死信號)和 SIGKILL(9)(強制殺死信號)。
你可以用這個命令看到所有信號的列表:
kill -l
上圖:共有 64 中信號,每種信號均有名稱和對應的信號序列號,當想要發送什么信號給系統的時候,只要告知系統該信號的序列號即可。如想要強制結束進程,則需要發送 9 號信號給系統,應該是這樣的:kill -9 pid 號。
實際中常用的只有 9 種信號(最常用的只有 2 中:9 和 15):
1 終端斷線
2 中斷(等同 Ctrl + C)
3 退出(同 Ctrl + \)
15 終止(可以使得進程在退出之前清理并釋放資源)
9 強制終止
18 繼續(與 19 相反)
19 暫停(等同 Ctrl + Z)
進階用法
1 查找進程號的方式進行改進
以查找 firefox 進程為例:
常規:ps -aux | grep java
進階:pgrep java
或: pidof firefox-bin (不推薦)
解讀:
pgrep: 這個命令是專門用于進程查詢的 grep。
pidof: 看到 pidof 想到啥?沒錯 pid of xx,字面翻譯過來就是 xx 的 PID。和 pgrep 相比稍顯不足的是,pidof 必須給出進程的全名。
2 將常規的兩步殺死進程合并為一步
進階 1:
kill -s 9 `ps -aux | grep firefox | awk {print $2} `
其中 awk {print $2} 的作用就是打印(print)出第二列的內容。根據常規篇,可以知道 ps 輸出的第二列正好是 PID。就把進程相應的 PID 通過 xargs 傳遞給 kill 作參數,殺掉對應的進程。
進階 2:
pgrep firefox | xargs kill -s 9
“xargs kill -s 9”中的 xargs 命令是用來把前面命令的輸出結果(PID)作為“kill -s 9”命令的參數,并執行該命令。“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 強制踢掉登陸用戶
有的時候,可能我們的系統中有很多用戶在同時登陸這一臺服務器,而我們想要踢掉某個不良用戶,就可以執行如下操作。
(1)查看用戶登陸信息: who
(2)查看自己的身份(避免把自己踢掉):whoami
(3)踢掉用戶 ats
pkill -kill -t pts/2(按終端踢,pts/ 2 為所踢用戶的終端)
或
pkill -u ats(按用戶名踢,ats 為用戶名)
kill 的注意事項
1. 如果 kill 時,不指定信號就會默認發送信號 15,終止指定進程,使得進程在退出之前清理并釋放資源。
2. 使用 kill 時,root 用戶將影響用戶的進程,非 root 用戶只能影響自己的進程。
3. 使用 kill 時,當 kill 向進程發送信號,必須是這些進程的主人。如果殺死一個沒有權限殺死的進程或殺死一個不存在的進程,就會報錯。如下:
-bash: kill: (20) - No such process
4. 使用 kill 時,如果成功地發送了信號,shell 會在屏幕上顯示出進程的終止信息。(按下 Enter 鍵,就會顯示出來)
5. 使用 kill 時,如果使用信號 9,使進程強行終止,可能會使數據丟失或者終端無法恢復到正常狀態。
6.init 進程,它是一個由內核啟動的用戶級進程,所有進程都是 init 進程的子孫,init 不可殺。
“linux 殺死進程命令 kill 如何使用”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注丸趣 TV 網站,丸趣 TV 小編將為大家輸出更多高質量的實用文章!