检查进程是否存在给定它的 pid

标签 c linux pid

鉴于 Linux 进程的 pid,我想从 C 程序中检查该进程是否仍在运行。

最佳答案

发布 kill(2)0 作为信号的系统调用。如果调用成功,说明存在这个pid的进程。

如果调用失败并且 errno 设置为 ESRCH,则不存在具有这种 pid 的进程。

引用 POSIX 标准:

If sig is 0 (the null signal), error checking is performed but no signal is actually sent. The null signal can be used to check the validity of pid.

请注意,您不能避免竞争条件:目标进程可能已退出,同时具有相同 pid 的另一个进程已启动。或者在你检查之后进程可能很快退出,你可以根据过时的信息做出决定。

只有当给定的 pid 是一个子进程(fork'从当前进程),你可以使用 waitpid(2)使用 WNOHANG 选项,或 try catch SIGCHLD 信号。这些在竞争条件下是安全的,但仅与子进程相关。

关于检查进程是否存在给定它的 pid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9152979/

相关文章:

c - 为什么 glibc 的 csu/init-first.c 中的 _init 在 _start 之前被调用,即使 _start 是 ELF 入口点?

c++ - 类型 "void *"的值不能分配给类型 "RANDOMSTRUCT *"的实体

Linux 守护进程没有 PID 文件竞争条件

Python MySQLDBexecutemany()在mac上工作,在linux上不执行任何操作

pid - 如何修复 slurm 中的 "slurmd.service: Can' t 打开 PID 文件“错误

linux - 在 Linux 上将单个 pid CPU 放入变量中

c - 为什么我们对对象使用指针而不是直接使用对象值?

c - 如何查找 B 树的层数

linux - VI 编辑器中搜索功能背后的算法是什么

linux - 使用什么来 SU 从普通用户 root 进行 scp 或 sftp?