Linux下kill掉一个进程的几种方式

1,600 阅读4分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

使用linux操作系统,难免会遇到一些应用卡壳或者运行不正常的问题,这时我们可以使用kill命令来结束相关进程。接下来,我们就一起来学习一下kill应用进程的多种方式。

kill

执行一个kill命令时,实际上是发送了一个信号给系统,让它去结束掉一些不正常的应用进程。 可以使用kill -l命令看到所有信号的列表: 下面是一些常用信号的含义:

(1)SIGHUP 终端线路挂断,终止进程
(2)SIGINT 中断进程(同 Ctrl + C)
(3)SIGQUIT 退出进程(同 Ctrl + \)
(15)SIGTERM 终止进程
(9)SIGKILL 强制终止进程
(18)SIGCONT 继续(与SIGSTOP相反, fg/bg命令)
(19)SIGSTOP 暂停(同 Ctrl + Z)

这里我们只需要了解(15)SIGTERM和(9)SIGKILL即可。

(15)SIGTERM:也就是执行kill -15 pid命令,这里"-15"即代表SIGTERM信号。
注意:SIGTERM是默认选项,也就是说执行kill pidkill -15 pid是等价的。
执行此指令时操作系统会发送一个SIGTERM信号给对应的程序,当程序接收到该信号后,可以用一段时间来正常关闭,一般会先保存进度并释放资源,然后再停止,也就是不一定会立即停止进程,比如程序正在等待IO,可能就不会立马停止运行。也就是说,(15)SIGTERM信号不是强制停止,是可以被忽略的。

(9)SIGKILL:也就是执行kill -9 pid命令,这里"-9"即代表SIGKILL信号。
是必杀信号,此信号强制进程立即停止运行。程序不能忽略此信号,而未保存的进度将会丢失,从而可能会影响服务的再次启动,此命令应该慎用。

kill的语法如下:

kill 信号或选项 pid

默认信号(当没有指定的时候)是SIGTERM。当它不起作用时,可以使用kill -9 pid命令来强制kill掉一个进程。

应用的pid可以使用以下的命令查看:

ps -ef

ps -aux

比如想要kill掉chrome浏览器的一个进程,只需要执行kill -9 21066即可。

是不是很简单,但有个问题,进程少了无所谓,一旦进程多了,要在一大堆进程信息里面查找到要kill的进程,实在是太难了。

可以把ps的查询结果通过管道传递给grep去查找包含特定字符串的进程。管道符|用来隔开两个命令,管道符左边命令的输出会作为管道符右边命令的输入。

ps -aux | grep chrome

如果记不住上面的命令也没关系,可以使用pgrep,pgrep的p表示了这个命令是专门用于进程查询的grep。

pgrep chrome


如果想要同时显示进程名和pid,可以添加-l参数:pgrep -l chrome

pkill

pkill命令允许使用扩展的正则表达式和其它匹配方式,就可以使用应用的进程名kill掉它们,而不是使用pid。例如,要kill掉chrome浏览器,只需要运行命令:

pkill chrome

也可以输入进程名的部分字符,比如:

pkill chro

看到这里是不是感觉pkill有点熟悉的感觉,看起来像是pgrep和kill的结合体,哈哈。

注意: 使用pkill时,为了避免kill掉错误的进程,应该先使用pgrep -l 进程名来查看一下匹配列表。

killall

killall和pkill相似,区别就是如果给出的进程名不完整,killall会报错,而pkill只要给出进程名的一部分就可以。 例如使用killall chro命令会得到“chro: 未找到进程”的报错信息,使用killall chrome才可以。

xkill

xkill是一个在桌面用的杀死图形界面的程序, 当你在终端键入"xkill",你的光标会有变化,只需要在应用上点击一下,它就会立刻kill掉这个应用。

xkill.gif

总结

使用这些"kill"命令,我们可以更好的处理不能正常运行的应用程序,从而可以避免系统崩溃宕机的发生。

原创不易,如果小伙伴们觉得有帮助,麻烦点个赞再走呗~

最后,感谢女朋友在工作和生活中的包容、理解与支持 !