新聞中心

公司主營業(yè)務:做網(wǎng)站、網(wǎng)站制作、移動網(wǎng)站開發(fā)等業(yè)務。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)公司是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴謹、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)公司推出蘭溪免費做網(wǎng)站回饋大家。
也就是說,kill 命令的執(zhí)行原理是這樣的,kill 命令會向操作系統(tǒng)內(nèi)核發(fā)送一個信號(多是終止信號)和目標進程的 PID,然后系統(tǒng)內(nèi)核根據(jù)收到的信號類型,對指定進程進行相應的操作。
kill 命令的基本格式如下:
[root@localhost ~]# kill [信號] PID
kill 命令是按照 PID 來確定進程的,所以 kill 命令只能識別 PID,而不能識別進程名。linux 定義了幾十種不同類型的信號,讀者可以使用 kill -l 命令查看所有信號及其編號,這里僅列出幾個常用的信號,如表 1 所示。
| 信號編號 | 信號名 | 含義 |
|---|---|---|
| 0 | EXIT | 程序退出時收到該信息。 |
| 1 | HUP | 掛掉電話線或終端連接的掛起信號,這個信號也會造成某些進程在沒有終止的情況下重新初始化。 |
| 2 | INT | 表示結束進程,但并不是強制性的,常用的 "Ctrl+C" 組合鍵發(fā)出就是一個 kill -2 的信號。 |
| 3 | QUIT | 退出。 |
| 9 | KILL | 殺死進程,即強制結束進程。 |
| 11 | SEGV | 段錯誤。 |
| 15 | TERM | 正常結束進程,是 kill 命令的默認信號。 |
需要注意的是,表中省略了各個信號名稱的前綴 SIG,也就是說,SIGTERM 和 TERM 這兩種寫法都對,kill 命令都可以理解。
下面,我們舉幾個例子來說明一下 kill 命令。
【例 1】 標準 kill 命令。
[root@localhost ~】# service httpd start
#啟動RPM包默認安裝的apache服務
[root@localhost ~]# pstree -p 丨 grep httpd | grep -v "grep"
#查看 httpd 的進程樹及 PID。grep 命令査看 httpd 也會生成包含"httpd"關鍵字的進程,所以使用“-v”反向選擇包含“grep”關鍵字的進程,這里使用 pstree 命令來查詢進程,當然也可以使用 ps 和 top 命令
|-httpd(2246)-+-httpd(2247)
| |-httpd(2248)
| |-httpd(2249)
| |-httpd(2250)
| |-httpd(2251)
[root@localhost ~]# kill 2248
#殺死PID是2248的httpd進程,默認信號是15,正常停止
#如果默認信號15不能殺死進程,則可以嘗試-9信號,強制殺死進程
[root@localhost ~]# pstree -p | grep httpd | grep -v "grep"
|-httpd(2246>-+-httpd(2247)
| |-httpd(2249)
| |-httpd(2250)
| |-httpd(2251)
#PID是2248的httpd進程消失了
【例 2】使用“-1”信號,讓進程重啟。
[root@localhost ~]# kill -1 2246
使用“-1 (數(shù)字1)”信號,讓httpd的主進程重新啟動
[root@localhost ~]# pstree -p | grep httpd | grep -v "grep"
|-httpd(2246)-+-httpd(2270)
| |-httpd(2271)
| |-httpd(2272)
| |-httpd(2273)
| |-httpd(2274)
#子httpd進程的PID都更換了,說明httpd進程已經(jīng)重啟了一次
【例 3】 使用“-19”信號,讓進程暫停。
[root@localhost ~]# vi test.sh #使用vi命令編輯一個文件,不要退出
[root@localhost ~]# ps aux | grep "vi" | grep -v "grep"
root 2313 0.0 0.2 7116 1544 pts/1 S+ 19:2.0 0:00 vi test.sh
#換一個不同的終端,查看一下這個進程的狀態(tài)。進程狀態(tài)是S(休眠)和+(位于后臺),因為是在另一個終端運行的命令
[root@localhost ~]# kill -19 2313
#使用-19信號,讓PID為2313的進程暫停。相當于在vi界面按 Ctrl+Z 快捷鍵
[root@localhost ~]# ps aux | grep "vi" | grep -v "grep"
root 2313 0.0 0.2 7116 1580 pts/1 T 19:20 0:00 vi test.sh
#注意2313進程的狀態(tài),變成了 T(暫停)狀態(tài)。這時切換回vi的終端,發(fā)現(xiàn)vi命令已經(jīng)暫停,又回到了命令提示符,不過2313進程就會卡在后臺。如果想要恢復,可以使用"kill -9 2313”命令強制中止進程,也可以利用后續(xù)章節(jié)將要學習的工作管理來進行恢復
學會如何使用 kill 命令之后,再思考一個問題,使用 kill 命令一定可以終止一個進程嗎?
答案是否定的。文章開頭說過,kill 命令只是“發(fā)送”一個信號,因此,只有當信號被程序成功“捕獲”,系統(tǒng)才會執(zhí)行 kill 命令指定的操作;反之,如果信號被“封鎖”或者“忽略”,則 kill 命令將會失效。
文章題目:Linuxkill命令詳解:終止進程
鏈接地址:http://m.fisionsoft.com.cn/article/cocdcpj.html


咨詢
建站咨詢
