作用
kill 命令是用来向进程发送一个用户指定的信号,对进程进行相应的操作。
kill 命令的执行原理是向操作系统内核发送一个信号(多是终止信号)和目标进程的 PID,系统内核根据收到的信号类型,对指定进程进行相应的操作。
进程PID可用ps、pidof、pstree、top等工具获取,然后使用kill命令来结束该进程。
用法
命令格式
1 | kill [options] <pid> [...] |
命令参数
1 | -l 参数为信号名称,显示该信号的数字。如果不加信号参数,显示全部信号名称 |
使用实例
1 | [root@hadoop-centos-01 ~]# kill -l |
代号 | 名称 | 内容 |
---|---|---|
1 | SIGHUP | 启动被终止的程序,可让该进程重新读取自己的配置文件,类似重新启动。 |
2 | SIGINT | 相当于用键盘输入 [ctrl]-c 来中断一个程序的进行。 |
9 | SIGKILL | 代表强制中断一个程序的进行,如果该程序进行到一半,那么尚未完成的部分可能会有“半产品”产生,类似 vim会有 .filename.swp 保留下来。 |
15 | SIGTERM | 以正常的方式来终止该程序。由于是正常的终止,所以后续的动作会将他完成。不过,如果该程序已经发生问题,就是无法使用正常的方法终止时,输入这个 signal 也是没有用的。 |
19 | SIGSTOP | 相当于用键盘输入 [ctrl]-z 来暂停一个程序的进行。 |
1 | [root@hadoop-centos-01 ~]# kill -15 pid |
1 | [root@hadoop-centos-01 ~]# kill -9 pid |
1 | [root@hadoop-centos-01 ~]# kill -19 pid |
1 | # 杀死指定用户所有进程 |
总结
kill命令可以带信号选项,也可以不带信号。如果没有信号号码,kill命令就会发出终止信号(15),该信号可以被进程捕获,使进程在退出之前可以清理并释放资源。也可以向进程发送发送指定信号;
可以向多个进程发信号或终止它们,当kill成功地发送了信号后,shell会在屏幕上显示出进程的终止信息;
应注意,信号使进程强行终止,这常会带来一些副作用,如数据丢失或者终端无法恢复到正常状态。发送信号时必须小心,只有在万不得已时,才用kill信号(9),因为进程不能首先捕获它。要撤销所有的后台作业,可以输入kill 0。因为有些在后台运行的命令会启动多个进程,跟踪并找到所有要杀掉的进程的PID是件很麻烦的事。这时,使用kill 0来终止所有由当前shell启动的进程,是个有效的方法;
kill 命令并不能100%终止进程,kill 命令只是“发送”一个信号,故只有当信号被程序成功“捕获”,系统才会执行 kill 命令指定的操作;反之,如果信号被“封锁”或者“忽略”,则 kill 命令将会失效。