Unix 指南/命令/程序管理/Kill
外觀
kill 是一個 unix 命令,用於向正在執行的程序傳送 unix 訊號。預設情況下,它會嘗試傳送 TERM 訊號,該訊號會要求程序停止執行,因此得名 kill。
可以使用 kill 命令檢視可用的訊號
$ 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 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 33) SIGRTMIN 34) SIGRTMIN+1 35) SIGRTMIN+2 36) SIGRTMIN+3 37) SIGRTMIN+4 38) SIGRTMIN+5 39) SIGRTMIN+6 40) SIGRTMIN+7 41) SIGRTMIN+8 42) SIGRTMIN+9 43) SIGRTMIN+10 44) SIGRTMIN+11 45) SIGRTMIN+12 46) SIGRTMIN+13 47) SIGRTMIN+14 48) SIGRTMIN+15 49) SIGRTMAX-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 $
您可以向具有特定名稱的所有程序傳送給定訊號,或者只向一個程序傳送,指定其 PID。例如,如果您想向程序 23154 傳送 SIGHUP 訊號
kill -s SIGHUP 23154
如果您想向所有名為 Apache 的程序傳送相同的訊號
kill -s SIGHUP Apache
您還可以對 pid 進行分組,以上兩個命令可以合併為
kill -s SIGHUP 23154 Apache
透過發出訊號,您可以更好地控制系統。假設您有一個正在執行的指令碼,其 PID 為 12345,該指令碼使用了大量的 CPU,您想在做其他事情時將其“暫停”。您可以向您的程序發出 STOP 訊號
kill -s STOP 12345
稍後要恢復它,您需要讓程序繼續工作
kill -s CONT 12345
示例
我們將啟動一個簡單的程序(sleep)作為後臺程序(&)。sleep 程序什麼也不做,只是等待給定的秒數(在本例中為 360 秒或 6 分鐘)
$ sleep 360 & [1] 7551 $
shell 會將程序的 PID(7551)返回給我們。讓它執行一段時間,然後使用 ps 命令檢查其狀態
$ ps -o fname,pid,stat,etime COMMAND PID STAT ELAPSED bash 7425 Ss 04:47 sleep 7551 S 00:58 ps 7600 R+ 49710-06:27:47 $
現在,我們要求程序暫停工作
$ kill -s STOP 7551
按 Enter 鍵更新輸出緩衝區,shell 會給出確認
$ [1]+ Stopped sleep 360 $
一段時間後,我們的程序仍然處於停止狀態
$ ps -o fname,pid,stat,etime COMMAND PID STAT ELAPSED bash 7425 Ss 10:37 sleep 7551 T 06:05 ps 7719 R+ 49710-06:27:47 $
您可以注意到,儘管程序應該在 5 分鐘後結束(請記住,我們使用了“sleep 360”),但自啟動以來已經過去了 6 分鐘。
現在,我們想讓程序繼續執行
$ kill -s CONT 7551
按 Enter 鍵更新緩衝區
$ [1]+ Done sleep 360 $
該程序完成了。當您發出 CONT 訊號時,程序恢復並檢查當前時間,由於已經過去了 360 秒以上,它自行結束了。