我們可以使用鍵盤(pán)或者 pkill 命令、kill 命令和 killall 命令向進(jìn)程發(fā)送各種信號(hào)。
在 Bash 下,我們可以使用鍵盤(pán)發(fā)送信號(hào),如下所示:
| 組合鍵 | 含義 |
|---|---|
| Ctrl + C | 中斷信號(hào),發(fā)送 SIGINT 信號(hào)到運(yùn)行在前臺(tái)的進(jìn)程 |
| Ctrl + Y | 延時(shí)掛起信號(hào),使運(yùn)行的進(jìn)程在嘗試從終端讀取輸入時(shí)停止。</br>控制權(quán)返回給 Shell,使用戶可以將進(jìn)程放在前臺(tái)或后臺(tái),或殺掉該進(jìn)程 |
| Ctrl + Z | 掛起信號(hào),發(fā)送 SIGTSTP 信號(hào)到運(yùn)行的進(jìn)程,由此將其停止,并將控制權(quán)返回給 Shell |
大多數(shù)主流的 Shell,包括 Bash,都有內(nèi)置的 kill 命令。Linux 系統(tǒng)中,也有 kill 命令,即 /bin/kill。如果使用 /bin/kill,則系統(tǒng)可能會(huì)激活一些額外的選項(xiàng),比如,殺掉不是你自己的進(jìn)程,或指定進(jìn)程名稱作為參數(shù),類似于 pgrep 和 pkill 命令。不過(guò)兩種 kill 命令默認(rèn)都是發(fā)送 SIGTERM 信號(hào)。
當(dāng)準(zhǔn)備殺掉一個(gè)進(jìn)程或一連串的進(jìn)程時(shí),我們的常識(shí)是從嘗試發(fā)送最安全的信號(hào)開(kāi)始,即 SIGTERM 信號(hào)。以這種方式,能夠正常停止運(yùn)行的程序,當(dāng)它收到 SIGTERM 信號(hào)時(shí),有機(jī)會(huì)按照已經(jīng)設(shè)計(jì)好的流程執(zhí)行,比如,清理和關(guān)閉打開(kāi)的文件。如果我們發(fā)送一個(gè) SIGKILL 信號(hào)到進(jìn)程,你將消除進(jìn)程先清理而后關(guān)閉的機(jī)會(huì),而這可能會(huì)導(dǎo)致不可預(yù)知的結(jié)果。但如果一個(gè)有序地終結(jié)不管用,那么發(fā)送 SIGINT 或 SIGKILL 信號(hào)就可能是唯一的方法了。例如,當(dāng)一個(gè)前臺(tái)進(jìn)程使用 Ctrl + C 組合鍵殺不掉時(shí),那么最好就是使用命令 “kill -9 PID” 了。
kill 命令可以發(fā)送多種信號(hào)到進(jìn)程。特別有用的信號(hào)包括:
- SIGHUP(1)
- SIGINT(2)
- SIGKILL(9)
- SIGCONT(18)
- SIGSTOP(19)
在 Bash 中,信號(hào)名或信號(hào)值都可以作為 kill 命令的選項(xiàng),而作業(yè)號(hào)或進(jìn)程號(hào)則作為 kill 命令的參數(shù)。
實(shí)例1:發(fā)送 SIGKILL 信號(hào)到 PID 是 123 的進(jìn)程:
kill -9 123
或是:
kill -KILL 123
也可以是:
kill -SIGKILL 123
實(shí)例2:使用 kill 命令終結(jié)一個(gè)作業(yè)。

注意:上面實(shí)例中“%”之后的是數(shù)字1。
killall 命令會(huì)發(fā)送信號(hào)到運(yùn)行任何指定命令的所有進(jìn)程。所以,當(dāng)一個(gè)進(jìn)程啟動(dòng)了多個(gè)實(shí)例時(shí),使用 killall 命令來(lái)殺掉這些進(jìn)程會(huì)更方便一些。
如果沒(méi)有指定信號(hào)名,killall 命令會(huì)默認(rèn)發(fā)送 SIGTERM 信號(hào)。例如,使用 killall 命令殺掉所有 firefox 進(jìn)程:
killall firefox
發(fā)送 KILL 信號(hào)到 firefox 的進(jìn)程:
killall -s SIGKILL firefox
使用 pkill 命令,可以通過(guò)指定進(jìn)程名、用戶名、組名、終端、UID、EUID和GID等屬性來(lái)殺掉相應(yīng)的進(jìn)程。pkill 命令默認(rèn)也是發(fā)送 SIGTERM 信號(hào)到進(jìn)程。
實(shí)例1:使用 pkill 命令殺掉所有用戶的 firefox 進(jìn)程:
pkill firefox
實(shí)例2:強(qiáng)制殺掉用戶 toby 的 firefox 進(jìn)程:
pkill -KILL -u toby firefox
實(shí)例3:讓 sshd 守護(hù)進(jìn)程重新加載它的配置文件:
pkill -HUP sshd
本文參考自 《Linux Shell命令行及腳本編程實(shí)例詳解 》