我正在查看一个nagios插件,我发现这个代码:
killall -0 $1
我尝试了这一点,它为一个正在运行的进程返回0
,但它并没有终止进程。
请解释这个0
值的含义,以及它为什么不杀死这个过程。
信号-0
只是检查指定的进程是否正在运行。 它并没有杀死它。 如果你想杀死进程使用-9
这是一个终止信号。
虽然这里没有列出-0
,但这个链接解释了其他一些信号: http : //man7.org/linux/man-pages/man7/signal.7.html
从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被回收和使用)。