给定Linux进程的pid,我想从C程序检查该进程是否仍在运行。
发出信号作为kill(2)系统调用0。如果调用成功,则表示存在具有此pid的进程。
kill(2)
0
如果调用失败并errno设置为ESRCH,则不存在具有此类pid的进程。
errno
ESRCH
引用POSIX标准:
如果sig为0(空信号),则执行错误检查,但实际上未发送任何信号。空信号可用于检查pid的有效性。
请注意,您在竞争条件下并不安全:目标进程可能已退出,并且与此同时已启动了另一个具有相同pid的进程。否则,检查后该过程可能很快退出,您可以根据过时的信息做出决定。
仅当给定的pid是子进程(fork从当前进程开始)时,才可以使用waitpid(2)该WNOHANG选项,或尝试捕获SIGCHLD信号。这些在种族条件下是安全的,但仅与子进程有关。
fork
waitpid(2)
WNOHANG
SIGCHLD