鉴于 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/