我正在寻找一个nagios插件,我发现了这段代码:
killall -0 $1
我尝试了这个并且它返回0
以进行正在运行的进程,但它没有终止进程。
请解释此0
值的含义以及它为何不会终止该过程。
答案 0 :(得分:2)
signal -0
只检查指定的进程是否正在运行。它并没有杀死它。如果你想杀死进程,请使用-9
作为终止信号。
虽然此处未列出-0
,但此链接解释了其他一些信号:
http://man7.org/linux/man-pages/man7/signal.7.html
答案 1 :(得分:0)
来自man 2 kill
:
如果sig为0,则不发送任何信号,但错误检查仍然存在 执行;这可以用于检查进程ID的存在 或处理组ID。
kill(2)
成功时返回0
,否则返回-1
。因此,对于零信号,假设进程具有足够的权限向目标进程发送信号,如果进程或进程组ID存在,则返回0
,否则返回-1
(和将errno
设置为ESRCH
)。请注意,手册页只是说明错误检查仍在执行,因此如果目标进程存在但它将返回-1
并将errno
设置为EPERM
发送过程没有足够的权限向其发送信号。
killall(1)
和kill(1)
命令实用程序的行为相似,因为它们使用了kill(2)
。
请注意,程序代码不应该依赖于此来根据进程的存在做出决策:在检查进程存在与使用该进程可能终止的信息(可能是新的)之间总会有一个时间窗口。 ,不相关的过程在该时间窗口开始,并且回收和使用相同的PID)。