您的位置:首页 > 运维架构 > Linux

【Unix/Linux】【命令】【进程】终止进程 —— kill,killall命令

2014-08-31 01:24 489 查看

kill命令

Linux中的kill命令用来终止指定的进程(terminate a process)的运行,是Linux下进程管理的常用命令。

通常,终止一个前台进程可以使用Ctrl+C键,但是,对于一个后台进程就须用kill命令来终止,我们就需要先使用ps/pidof/pstree/top等工具获取进程PID,然后使用kill命令来杀掉该进程。

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

命令格式:

kill  [参数]  进程号


命令功能:

发送指定的信号到相应进程。不指定信号将发送SIGTERM(15)终止指定进程。如果无法终止该程序可用“-KILL” 参数,其发送的信号为SIGKILL(9) ,将强制结束进程,使用ps命令或者jobs 命令可以查看进程号。root用户将影响用户的进程,非root用户只能影响自己的进程。

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

可以向多个进行发信号/终止它们。

命令参数:

-l 信号 —— 若果不加信号的编号参数,则使用“-l”参数会列出全部的信号名称
-a —— 当处理当前进程时,不限制命令名和进程号的对应关系
-p —— 指定kill 命令只打印相关进程的进程号,而不发送任何信号
-s —— 指定发送信号
-u —— 指定用户

使用示例:

实例1:杀掉指定进程

kill 进程号


实例2:彻底杀死进程

kill -9 进程号


实例3:列出所有信号名称



killall命令

Linux系统中的killall命令用于杀死指定名字的进程(kill processes by name)。

我们可以使用kill命令杀死指定进程PID的进程,如果要找到我们需要杀死的进程,我们还需要在之前使用ps等命令再配合grep来查找进程,而killall把这两个过程合二为一。

命令格式:

killall  [参数]  进程名


命令功能:

用来结束同名的的所有进程。

命令参数:

-Z 只杀死拥有scontext 的进程
-e 要求匹配进程名称
-I 忽略小写
-g 杀死进程组而不是进程
-i 交互模式,杀死进程前先询问用户
-l 列出所有的已知信号名称
-q 不输出警告信息
-s 发送指定的信号
-v 报告信号是否成功发送
-w 等待进程死亡
--help 显示帮助信息
--version 显示版本显示

使用示例:

实例1:杀死所有同名进程

命令:

killall vi


输出:

[root@localhost ~]# ps -ef|grep vi
root     17581 17398  0 17:51 pts/0    00:00:00 vi test.txt
root     17611 17582  0 17:51 pts/1    00:00:00 grep vi
[root@localhost ~]# ps -ef|grep vi
root     17581 17398  0 17:51 pts/0    00:00:00 vi test.txt
root     17640 17612  0 17:51 pts/2    00:00:00 vi test.log
root     17642 17582  0 17:51 pts/1    00:00:00 grep vi
[root@localhost ~]# killall vi
[root@localhost ~]# ps -ef|grep vi
root     17645 17582  0 17:52 pts/1    00:00:00 grep vi


实例2:向进程发送指定信号

命令:

[root@localhost ~]# ps -ef|grep vi
root     17581 17398  0 17:51 pts/0    00:00:00 vi test.txt
root     17611 17582  0 17:51 pts/1    00:00:00 grep vi
[root@localhost ~]# ps -ef|grep vi
root     17581 17398  0 17:51 pts/0    00:00:00 vi test.txt
root     17640 17612  0 17:51 pts/2    00:00:00 vi test.log
root     17642 17582  0 17:51 pts/1    00:00:00 grep vi
[root@localhost ~]# killall vi
[root@localhost ~]# ps -ef|grep vi
root     17645 17582  0 17:52 pts/1    00:00:00 grep vi


输出:

[root@localhost ~]# vi &
[1] 17646[root@localhost ~]# killall -TERM vi
[1]+  Stopped                 vi
[root@localhost ~]# vi &
[2] 17648[root@localhost ~]# ps -ef|grep vi
root     17646 17582  0 17:54 pts/1    00:00:00 vi
root     17648 17582  0 17:54 pts/1    00:00:00 vi
root     17650 17582  0 17:55 pts/1    00:00:00 grep vi
[2]+  Stopped                 vi
[root@localhost ~]# killall -TERM vi
[root@localhost ~]# ps -ef|grep vi
root     17646 17582  0 17:54 pts/1    00:00:00 vi
root     17648 17582  0 17:54 pts/1    00:00:00 vi
root     17653 17582  0 17:55 pts/1    00:00:00 grep vi
[root@localhost ~]# killall -KILL vi
[1]-  已杀死               vi
[2]+  已杀死               vi
[root@localhost ~]# ps -ef|grep vi
root     17656 17582  0 17:56 pts/1    00:00:00 grep vi
[root@localhost ~]#
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: