Linux kill命令

一、kill命令

kill命令用来终止一个进程的运行。通常,终止一个前台进程可以使用Ctrl+C键,但是,对于一个后台进程就须用kill命令来终止。kill命令是通过向进程发送指定的信号来结束相应进程的。在默认情况下,采用编号为15的TERM信号。TERM信号将终止所有不能捕获该信号的进程。对于那些可以捕获该信号的进程就要用编号为9的kill信号,强行“杀掉”该进程。

一般格式:
kill [-s 信号 | -p] [-a] 进程号
kill -l [信号]

选项:
-s 指定需要发送的信号,既可以是信号名(如SIGKILL),也可以是对应信号的号码(如9)。
-p 指定kill命令只是显示进程的PID(进程标志号),并不真正发出结束信号。
-l 显示信号名称列表,这也可以在/usr/include/linux/signal.h文件中找到。

注意:
1、kill命令可以带信号号码选项,也可以不带。如果没有信号号码,kill命令就会发出终止信号(15),这个信号可以被进程捕获,使得进程在退出之前可以清理并释放资源。也可以用kill向进程发送特定的信号。例如:
kill -2 123
它的效果等同于在前台运行PID为123的进程时按下Ctrl+C键。但是,普通用户只能使用不带signal参数的kill命令或最多使用-9信号。

2、kill可以带有进程ID号作为参数。当用kill向这些进程发送信号时,必须是这些进程的主人。如果试图撤销一个没有权限撤销的进程或撤销一个不存在的进程,就会得到一个错误信息。

3、可以向多个进程发信号或终止它们。

4、当kill成功地发送了信号后,shell会在屏幕上显示出进程的终止信息。有时这个信息不会马上显示,只有当按下Enter键使shell的命令提示符再次出现时,才会显示出来。

5、应注意,信号使进程强行终止,这常会带来一些副作用,如数据丢失或者终端无法恢复到正常状态。发送信号时必须小心,只有在万不得已时,才用kill信号(9),因为进程不能首先捕获它。要撤销所有的后台作业,可以输入kill 0。因为有些在后台运行的命令会启动多个进程,跟踪并找到所有要杀掉的进程的PID是件很麻烦的事。这时,使用kill 0来终止所有由当前shell启动的进程,是个有效的方法。

常用命令:
例如有个PID为123的进程。

删除进程:
kill 123

强制终止进程:
kill -9 123

二、信号
前面说了可以用kill -l查看所有信号。计算机上进程状态至少包括:初始、就绪、执行、等待、终止五个状态。信号相当于一个中断机制,可以改变进程的状态。

CentOS下常见信号:
SIGHUP (1) :重新启动进程
SIGINT (2) :相当于用Ctrl+c中断进程
SIGKILL (9) :强制终止进程
SIGUSR1 (10) :用户定义的信号
SIGTREM (15) :正常结束进程
SIGSTOP (19) :停止进程
SIGTSTP (20) :相当于用Ctrl+z将前台进程转入后台

三、killall命令

killall命令用来终止某个程序名称的所有进程。

一般格式:
killall [选项] [-s 信号] 程序名称

选项:
-i 在终止进程前询问用户,交互方式
-l 显示所有信号名
-q 不显示完成信息
-u USER 终止某个用户运行的进程

常用命令:

终止httpd程序:
killall httpd

强制终止httpd程序:
killall -9 httpd

参考资料:
http://www.linuxde.net/2011/09/861.html