linux - 什么是零信号?

标签 linux unix signals nagios

我正在研究一个 nagios 插件,我发现了这段代码:

killall -0 $1

我试过了,它为正在运行的进程返回了 0,但它并没有终止进程。

请解释这个0值的含义以及它没有终止进程的原因。

最佳答案

来自 man 2 kill:

If sig is 0, then no signal is sent, but error checking is still performed; this can be used to check for the existence of a process ID or process group ID.

kill(2) 成功时返回 0,否则返回 -1。因此,对于零信号,假设进程有足够的权限向目标进程发送信号,如果进程或进程组 ID 存在则返回 0,否则返回 - 1(并将 errno 设置为 ESRCH)。请注意,手册页只是说明仍然执行错误检查,因此它将返回 -1 并将 errno 设置为 EPERM 如果目标进程存在但发送进程没有足够的权限向它发送信号。

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

请注意,程序代码不应该依赖于此来根据进程的存在做出决定:在检查进程是否存在和使用进程可能终止的信息之间总是有一个时间窗口(并且可能是一个新的,不相关的进程在该时间窗口启动,并且回收和使用相同的 PID)。

关于linux - 什么是零信号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32259228/

相关文章:

c++ - qt预处理器

R filter() 处理 NA

c - objdump -t/usr/bin/sort 命令不显示任何符号

linux - 如何从 Linux 命令行确定 LCD 显示器是否打开

php - echo 在 8 字节输入上写入成功,但在其他输入上写入失败

linux - 如何在不使用json工具和JQ工具的情况下在shell脚本中读取和解析JSON

linux - 每 n 行拆分批量文本文件

c - 在三个管道之间传输消息

ubuntu - mysqld 在运行简单查询时收到信号 6

unix - GCC 总是尝试使用静态 libc 库而不是共享库