一尘不染

给定其pid,检查进程是否存在

linux

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


阅读 362

收藏
2020-06-03

共1个答案

一尘不染

发出信号作为kill(2)系统调用0。如果调用成功,则表示存在具有此pid的进程。

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

引用POSIX标准:

如果sig为0(空信号),则执行错误检查,但实际上未发送任何信号。空信号可用于检查pid的有效性。

请注意,您在竞争条件下并不安全:目标进程可能已退出,并且与此同时已启动了另一个具有相同pid的进程。否则,检查后该过程可能很快退出,您可以根据过时的信息做出决定。

仅当给定的pid是子进程(fork从当前进程开始)时,才可以使用waitpid(2)WNOHANG选项,或尝试捕获SIGCHLD信号。这些在种族条件下是安全的,但仅与子进程有关。

2020-06-03