Linux 結(jié)束進(jìn)程
前面小節(jié)介紹了如何啟動一個程序進(jìn)程,還介紹了如何查看系統(tǒng)進(jìn)程信息,本小節(jié)來介紹如何通過 kill
命令結(jié)束進(jìn)程。
1. Linux 進(jìn)程信號介紹
下面列舉出 Linux 進(jìn)程信號的描述:
信號 | 名稱 | 描述 |
---|---|---|
1 | HUP | 掛起 |
2 | INT | 中斷 |
3 | QUIT | 結(jié)束運(yùn)行 |
9 | KILL | 無條件終止 |
11 | SEGV | 段錯誤 |
15 | TERM | 盡可能終止 |
17 | STOP | 無條件停止運(yùn)行,但不終止 |
18 | TSTP | 停止或暫停,但繼續(xù)在后臺運(yùn)行 |
19 | CONT | 在 STOP 或 TSTP 之后恢復(fù)執(zhí)行 |
2. 查看進(jìn)程的 PID
這里還是以之前啟動的 nginx
進(jìn)程為例,使用 ps
查看 nginx
命令如下:
ps -ef | grep nginx
執(zhí)行結(jié)果如下圖:
Tips:如圖所示,可以看到有三條
nginx
相關(guān)信息信息,其中 PID 為12512
這一列表示的是當(dāng)前打開窗口的進(jìn)程,12471
和12472
這兩個 PID 無法直接判斷是否是之前啟動nginx
服務(wù)的 PID,下面可以使用端口號去確認(rèn)進(jìn)程 PID。
3. 端口號概念
所謂的端口,就好像是門牌號一樣,客戶端可以通過 ip 地址找到對應(yīng)的服務(wù)器端,但是服務(wù)器端是有很多端口的,每個應(yīng)用程序?qū)?yīng)一個端口號,通過類似門牌號的端口號,客戶端才能真正的訪問到該服務(wù)器。為了對端口進(jìn)行區(qū)分,將每個端口進(jìn)行了編號,這就是端口號 。
4. 通過進(jìn)程 PID 查找端口號
nginx
軟件服務(wù)啟動之后默認(rèn)的端口號是 80
,可以使用如下命通過 PID
查找到端口號,命令如下:
netstat -apn | grep 12471
執(zhí)行結(jié)果如下:
Tips:如圖所示,可以知道進(jìn)程
PID = 12471
這個進(jìn)程符合nginx
啟動的端口號。
4. kill 結(jié)束進(jìn)程
前面查找到進(jìn)程的 PID
之后,可以使用 kill
命令殺死進(jìn)程,命令如下:
kill -9 12471
ps -ef | grep nginx
執(zhí)行結(jié)果如下圖:
Tips:從圖中可以看到,使用
kill -9
命令之后,可以殺掉PID = 12471
這個進(jìn)程,12472
屬于12471
的子進(jìn)程,所以也會被一起殺掉,從前面的表中可以看到-9
表示無條件終止。
5. killall 結(jié)束進(jìn)程
killall
命令可以直接通過進(jìn)程相關(guān)的名稱來結(jié)束進(jìn)程,先啟動 nginx
服務(wù)之后,然后使用 killall
殺掉 nginx
相關(guān)的進(jìn)程,命令如下:
service nginx start
ps -ef | grep nginx
killall nginx
ps -ef | grep nginx
執(zhí)行結(jié)果如下圖:
Tips:實際業(yè)務(wù)中
killall
使用時需要謹(jǐn)慎,防止root
權(quán)限誤操作誤殺其他進(jìn)程。
6. 小結(jié)
本小節(jié)介紹了進(jìn)程通信信號描述,介紹了如何使用 ps
命令查看進(jìn)程的 PID
,還介紹了如何使用 kill
和 killall
結(jié)束進(jìn)程,其中 kill
是通過進(jìn)程的 PID
來結(jié)束掉進(jìn)程的,killall
可以通過進(jìn)程名稱來結(jié)束掉進(jìn)程,另外還介紹了如何使用 PID
去查找該應(yīng)用程序占用的端口號。