本人在Linux下面想殺掉一個進程的時候通常會用kill -9,但說實在的,到底為什麼用kill -9自己也說不出個所以然來,今天正好想到這個問題就網上查了一下。
首先說說kill命令,kill命令是Linux下面的一個終止進程的命令。
在Shell下面打kill可以看到kill的文法如下,
[root@cent-1 opt]# killkill: usage: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]
-s 指定發送的訊號
pid是要終止的進程編號
sigspec表示訊號
通過kill -l可以看到所有的訊號變數,
[root@cent-1 opt]# kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR111) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+338) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+843) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+1348) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-1253) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-758) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-263) SIGRTMAX-1 64) SIGRTMAX
具體每種變數的含義在此就不做多解釋了,這裡主要說一下kill 和kill -9的區別。
kill pid
kill pid和kill -s 15 pid含義一樣,表示發送一個SIGTERM的訊號給對應的程式。程式收到該訊號後,將會發生以下事情,
1 程式立刻停止
2 程式釋放相應資源後立刻停止
3 程式可能仍然繼續運行
大部分程式在接收到SIGTERM訊號後,會先釋放自己的資源,然後再停止。但也有一些程式在收到訊號後,做一些其他事情,並且這些事情是可以配置的。也就是說,SIGTERM多半是會被阻塞,忽略的。
kill -9 pid
kill -9 pid等於kill -s 9 pid,表示強制,儘快終止一個進程。多半admin會用這個命令。