国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 系統(tǒng) > Linux > 正文

Linux kill命令詳解:終止進(jìn)程

2024-08-27 23:56:40
字體:
供稿:網(wǎng)友
kill 從字面來看,就是用來殺死進(jìn)程的命令,但事實(shí)上,這個(gè)或多或少帶有一定的誤導(dǎo)性。從本質(zhì)上講,kill 命令只是用來向進(jìn)程發(fā)送一個(gè)信號(hào),至于這個(gè)信號(hào)是什么,是用戶指定的。

也就是說,kill 命令的執(zhí)行原理是這樣的,kill 命令會(huì)向操作系統(tǒng)內(nèi)核發(fā)送一個(gè)信號(hào)(多是終止信號(hào))和目標(biāo)進(jìn)程的 PID,然后系統(tǒng)內(nèi)核根據(jù)收到的信號(hào)類型,對(duì)指定進(jìn)程進(jìn)行相應(yīng)的操作。

kill 命令的基本格式如下:

[root@localhost ~]# kill [信號(hào)] PID

kill 命令是按照 PID 來確定進(jìn)程的,所以 kill 命令只能識(shí)別 PID,而不能識(shí)別進(jìn)程名。linux 定義了幾十種不同類型的信號(hào),讀者可以使用 kill -l 命令查看所有信號(hào)及其編號(hào),這里僅列出幾個(gè)常用的信號(hào),如表 1 所示。

表 1 kill命令常用信號(hào)及其含義
信號(hào)編號(hào)信號(hào)名含義
0EXIT 程序退出時(shí)收到該信息。
1HUP掛掉電話線或終端連接的掛起信號(hào),這個(gè)信號(hào)也會(huì)造成某些進(jìn)程在沒有終止的情況下重新初始化。
2INT表示結(jié)束進(jìn)程,但并不是強(qiáng)制性的,常用的 "Ctrl+C" 組合鍵發(fā)出就是一個(gè) kill -2 的信號(hào)。
3QUIT退出。
9KILL殺死進(jìn)程,即強(qiáng)制結(jié)束進(jìn)程。
11SEGV 段錯(cuò)誤。
15TERM正常結(jié)束進(jìn)程,是 kill 命令的默認(rèn)信號(hào)。

需要注意的是,表中省略了各個(gè)信號(hào)名稱的前綴 SIG,也就是說,SIGTERM 和 TERM 這兩種寫法都對(duì),kill 命令都可以理解。

下面,我們舉幾個(gè)例子來說明一下 kill 命令。

【例 1】 標(biāo)準(zhǔn) kill 命令。

[root@localhost ~】# service httpd start
#啟動(dòng)RPM包默認(rèn)安裝的apache服務(wù)
[root@localhost ~]# pstree -p 丨 grep httpd | grep -v "grep"
#查看 httpd 的進(jìn)程樹及 PID。grep 命令査看 httpd 也會(huì)生成包含"httpd"關(guān)鍵字的進(jìn)程,所以使用“-v”反向選擇包含“grep”關(guān)鍵字的進(jìn)程,這里使用 pstree 命令來查詢進(jìn)程,當(dāng)然也可以使用 ps 和 top 命令
|-httpd(2246)-+-httpd(2247)
|    |-httpd(2248)
|    |-httpd(2249)
|    |-httpd(2250)
|    |-httpd(2251)
[root@localhost ~]# kill 2248
#殺死PID是2248的httpd進(jìn)程,默認(rèn)信號(hào)是15,正常停止
#如果默認(rèn)信號(hào)15不能殺死進(jìn)程,則可以嘗試-9信號(hào),強(qiáng)制殺死進(jìn)程
[root@localhost ~]# pstree -p | grep httpd | grep -v "grep"
|-httpd(2246>-+-httpd(2247)
|    |-httpd(2249)
|    |-httpd(2250)
|    |-httpd(2251)
#PID是2248的httpd進(jìn)程消失了


【例 2】使用“-1”信號(hào),讓進(jìn)程重啟。

[root@localhost ~]# kill -1 2246
使用“-1 (數(shù)字1)”信號(hào),讓httpd的主進(jìn)程重新啟動(dòng)
[root@localhost ~]# pstree -p | grep httpd | grep -v "grep"
|-httpd(2246)-+-httpd(2270)
|    |-httpd(2271)
|    |-httpd(2272)
|    |-httpd(2273)
|    |-httpd(2274)
#子httpd進(jìn)程的PID都更換了,說明httpd進(jìn)程已經(jīng)重啟了一次


【例 3】 使用“-19”信號(hào),讓進(jìn)程暫停。

[root@localhost ~]# vi test.sh #使用vi命令編輯一個(gè)文件,不要退出
[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
#換一個(gè)不同的終端,查看一下這個(gè)進(jìn)程的狀態(tài)。進(jìn)程狀態(tài)是S(休眠)和+(位于后臺(tái)),因?yàn)槭窃诹硪粋€(gè)終端運(yùn)行的命令
[root@localhost ~]# kill -19 2313
#使用-19信號(hào),讓PID為2313的進(jìn)程暫停。相當(dāng)于在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進(jìn)程的狀態(tài),變成了 T(暫停)狀態(tài)。這時(shí)切換回vi的終端,發(fā)現(xiàn)vi命令已經(jīng)暫停,又回到了命令提示符,不過2313進(jìn)程就會(huì)卡在后臺(tái)。如果想要恢復(fù),可以使用"kill -9 2313”命令強(qiáng)制中止進(jìn)程,也可以利用后續(xù)章節(jié)將要學(xué)習(xí)的工作管理來進(jìn)行恢復(fù)


學(xué)會(huì)如何使用 kill 命令之后,再思考一個(gè)問題,使用 kill 命令一定可以終止一個(gè)進(jìn)程嗎?

答案是否定的。文章開頭說過,kill 命令只是“發(fā)送”一個(gè)信號(hào),因此,只有當(dāng)信號(hào)被程序成功“捕獲”,系統(tǒng)才會(huì)執(zhí)行 kill 命令指定的操作;反之,如果信號(hào)被“封鎖”或者“忽略”,則 kill 命令將會(huì)失效。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 横山县| 德惠市| 弥渡县| 色达县| 晋江市| 刚察县| 紫云| 平谷区| 晋州市| 晴隆县| 松滋市| 青神县| 南安市| 沅陵县| 托克逊县| 婺源县| 巴中市| 荥经县| 保山市| 邮箱| 巴东县| 马尔康县| 凤翔县| 宜宾县| 台前县| 安平县| 泽库县| 老河口市| 辽宁省| 湖州市| 方山县| 高雄县| 遵义县| 红桥区| 威海市| 九龙县| 开化县| 农安县| 琼海市| 乐业县| 微山县|