前言
在Linux下有很多命令用于杀死进程,它们可以用于不同的场景,例如通过进程名杀死进程,通过pid杀死进程。这些方法我不准备一一列举,本文想说明的一个问题是,为什么明明通过ps找到了进程,但是通过killall却说找不到呢?如果你没有遇到过这样的问题?那你更要注意了!
killall简介
与kill不同的是,killall可以根据进程名来杀死进程,不像kill,可能先需要使用ps(可以参考《ps命令实例详解》)找到进程id,然后发送信号,就像下面这样:
$ ps -ef|grep hello
root 15530 6335 0 14:55 pts/4 00:00:00 ./hello
$ kill -9 15530
这样进程就被我们杀死了,我们可以直接使用killall:
$ killall hello
是不是觉得方便多了?
而且由于killall是根据名称杀死进程,因此如果当前运行着大量的hello程序,那么可以一次性杀死所有hello程序。
除此之外,它还有很多参数,例如忽略大小写,根据模式匹配进程名,杀死某个时间的进程等等,这里就不详解介绍了,有兴趣的可以查看man killall手册。
今天这里想要说明的是一种killall失效的情况。
killall失效了?
我写了一个自己的hello程序,然后尝试使用killall杀死正在运行的hello程序。
$ killall hello
hello: no process found
什么?竟然说找不到?一个ps丢过来:
$ ps -ef|grep hello
root 15765 6335 0 15:05 pts/4 00:00:00 ./hello
所以killall你到底行不行?