版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。
在linux上进行工作,常常需要使用kill命令中止进程。一般情况下,使用ps命令找出待中止的进程ID,直接使用"kill PID"就可以了。但这个命令偶尔也会失效,进程无法中止,这时,就需要对kill命令进行一些深入了解,来寻求解决办法。
先看一下linux对kill命令的描述:
DESCRIPTION
Thecommand kill sends the specified signal to the specified process or process group.If no signal is specified, the TERM signal is sent.
The TERM signal will kill processes which do not catch this signal.For other processes, it may be necessary to use theKILL(9)signal,since this signal cannot be caught.
原来,kill命令可以发送多个不同的信号。默认(缺省)情况下,kill发送的是TERM,即15(SIGTERM)信号,"kill PID"与"kill -15 PID"是一样的。这个信号通常会要求程序自己正常退出,是一种比较安全的用法。但它是可以被阻塞,处理和忽略的,所以对于有的进程,会中止失败。
另一个常用的信号是9(SIGKILL),这个命令表示立即结束程序,是不能被阻塞,处理和忽略的。在TERM信号失效的情况下,可以尝试使用"kill -9 PID"。使用"kill -l",可以查看更多的信号列表。
虽然"kill -9"命令已经很强大,但也有可能还是不能达到目的。这时候,还有一个办法,就是使用"ps -ef"找出待中止的进程的父进程(PPID),然后使用kill或killall命令杀掉它。