Linux 程序管理 kill、killall、pkill命令
阿新 • • 發佈:2018-12-14
Linux常用訊號(程序間通訊)
系統中可以識別的訊號較多,我們可以使用命令"kill -l"或"man 7 signal"來查詢。命令如下:
[[email protected] ~]# kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR 31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8 43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2 63) SIGRTMAX-1 64) SIGRTMAX
常見的程序訊號最重要的就是 "1"、"9"、"15"這三個訊號
訊號代號 | 訊號名稱 | 說 明 |
---|---|---|
1 | SIGHUP | 該訊號讓程序立即關閉.然後重新讀取配置檔案之後重啟 |
2 | SIGINT | 程式中止訊號,用於中止前臺程序。相當於輸出 Ctrl+C 快捷鍵 |
8 | SIGFPE | 在發生致命的算術運算錯誤時發出。不僅包括浮點運算錯誤,還包括溢位及除數為 0 等其他所有的算術運算錯誤 |
9 | SIGKILL | 用來立即結束程式的執行。本訊號不能被阻塞、處理和忽略。般用於強制中止程序 |
14 | SIGALRM | 時鐘定時訊號,計算的是實際的時間或時鐘時間。alarm 函式使用該訊號 |
15 | SIGTERM | 正常結束程序的訊號,kill 命令的預設訊號。 如果程序已經發生了問題,那麼這個訊號是無法正常中止程序的,這時我們才會嘗試 SIGKILL訊號(訊號 9) |
18 | SIGCONT | 該訊號可以讓暫停的程序恢復執行。本訊號不能被阻斷 |
19 | SIGSTOP | 該訊號可以暫停前臺程序,相當於輸入 Ctrl+Z 快捷鍵。本訊號不能被阻斷 |
kill命令:終止程序
kill是用來殺死程序的命令。可以根據不同的訊號,kill 命令可以完成不同的操作,預設訊號是15,正常停止。kill 命令格式如下:
[[email protected] ~]# kill [訊號] PID
kill 命令是按照 PID 來確定程序的,所以 kill 命令只能識別 PID,而不能識別程序名。我們舉幾個例子來說明一下 kill 命令。
使用“-1”訊號,讓程序重啟
[[email protected] ~]# kill -1 程序號
使用“-19”訊號,讓程序暫停
[[email protected] ~]# kill -19 程序號
killall命令:終止特定的一類程序
killall 命令不再依靠 PID 來殺死單個程序,而是通過程式的程序名來殺死一類程序。命令格式如下:
[[email protected] ~]# killall [選項] [訊號] 程序名
選項:
- -i:互動式,詢問是否要殺死某個程序;
- -l:忽略程序名的大小寫;
殺死httpd程序
#啟動RPM包預設安裝的apache服務 [[email protected] ~]# service httpd start #檢視httpd程序 [[email protected] ~]# ps aux | grep "httpd" | grep -v "grep" root 1600 0.0 0.2 4520 1696? Ss 19:42 0:00 /usr/local/apache2/bin/httpd -k start daemon 1601 0.0 0.1 4520 1188? S 19:42 0:00 /usr/local/apache2/bin/httpd -k start daemon 1602 0.0 0.1 4520 1188? S 19:42 0:00 /usr/local/apache2/bin/httpd -k start daemon 1603 0.0 0.1 4520 1188? S 19:42 0:00 /usr/local/apache2/bin/httpd -k start daemon 1604 0.0 0.1 4520 1188? S 19:42 0:00 /usr/local/apache2/bin/httpd -k start daemon 1605 0.0 0.1 4520 1188? S 19:42 0:00 /usr/local/apache2/bin/httpd -k start #殺死所有程序名是httpd的程序 [[email protected] ~]# killall httpd #查詢發現所有的httpd程序都消失了 [[email protected] ~]# ps aux | grep "httpd" | grep -v "grep"
互動式殺死sshd程序
#查詢系統中有3個sshd程序。1733是sshd服務的程序,1735和1758是兩個遠端連線的程序 [[email protected] ~]# ps aux | grep "sshd" | grep -v "grep" root 1733 0.0 0.1 8508 1008? Ss 19:47 0:00/usr/sbin/sshd root 1735 0.1 0.5 11452 3296? Ss 19:47 0:00 sshd: [email protected]/0 root 1758 0.1 0.5 11452 3296? Ss 19:47 0:00 sshd: [email protected]/1 #互動式殺死sshd程序 [[email protected] ~]# killall -i sshd #這個程序是sshd的服務程序,如果殺死,那麼所有的sshd連線都不能登陸 殺死sshd(1733)?(y/N)n #這是當前登入終端,不能殺死我自己吧 殺死 sshd(1735)?(y/N)n #殺死另一個sshd登陸終端 殺死 sshd(1758)?(y/N)y
pkill命令:終止程序,按終端號踢出使用者
pkill 命令和 killall 命令非常類似,也是按照程序名來殺死程序的。命令格式如下:
[[email protected] ~]# pkill [選項] [訊號] 程序名
選項:
- -t 終端號:按照終端號踢出使用者;
不過 pkill 命令可以按照終端號來踢出使用者。不知道大家發現沒有,剛剛通過 killall 命令殺死 sshd 程序的方式來踢出使用者,非常容易誤殺死程序,要麼會把 sshd 服務殺死,要麼會把自己的登入終端殺死。
所以,不管是使用 kill 命令按照 PID 殺死登入程序,還是使用 killall 命令按照程序名殺死登入程序,都是非常容易誤殺死程序的。 具體命令如下:
#使用w命令査詢本機已經登入的使用者 [[email protected] ~]# w 20:06:34 up 28 min, 3 users, load average: 0.00, 0.00, 0.00 USER TTY FROM [email protected] IDLE JCPU PCPU WHAT root ttyl - 19:47 18:52 0.01s 0.01s -bash root pts/0 192.168.0.100 19:47 0.00s 0.09s 0.04s w root pts/1 192.168.0.100 19:51 14:56 0.02s 0.02s -bash #當前主機已經登入了三個root使用者,一個是本地終端ttyl登入,另外兩個是從192.168.0.100登陸的遠端登入 #強制殺死從pts/1虛擬終端登陸的程序 [[email protected] ~]# pkill -9 -t pts/1 #虛擬終端pts/1的登入程序已經被殺死了 [[email protected] ~]# w 20:09:09 up 30 min, 2 users, load average: 0.00, 0.00,0.00 USER TTY FROM [email protected] IDLE JCPU PCPU WHAT root ttyl - 19:47 21:27 0.01s 0.01s -bash root pts/0 192.168.0.100 19:47 0.00s 0.06s 0.00s w