小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
使用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 pid
和kill -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掉这个应用。
总结
使用这些"kill"命令,我们可以更好的处理不能正常运行的应用程序,从而可以避免系统崩溃宕机的发生。
原创不易,如果小伙伴们觉得有帮助,麻烦点个赞再走呗~
最后,感谢女朋友在工作和生活中的包容、理解与支持 !