什么是零信号?

我正在查看一个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 (并将errnoESRCH )。 请注意,手册页只是指出错误检查仍在执行 ,所以如果目标进程存在但发送进程没有足够的权限发送信号,它将返回-1并将errnoEPERM

killall(1)kill(1)命令实用程序的行为相似,因为它们使用kill(2)

请注意,程序代码不应依赖于此来根据进程的存在来做出决定:在检查进程是否存在以及在进程可能终止的情况下使用该信息(可能还有一个新的,不相关的进程从那个时间窗口开始,并且相同的PID被回收和使用)。