killall为什么有时候会找不到进程?

在Linux下,当使用killall命令无法杀死某些进程时,可能是由于进程名在stat文件中被修改。通过strace分析,killall是通过proc文件系统下的stat文件查找进程名。可以使用prctl函数修改stat中的名字,导致killall失效。尽管如此,ps命令可能仍能通过命令名找到进程。了解这些细节有助于解决killall失效的问题。
摘要由CSDN通过智能技术生成

 

前言

在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你到底行不行?

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值