我有一个分叉进程的pid。现在,从我的c代码(在Linux上运行)中,我必须定期检查这个进程是否仍在运行或已终止。我不想使用像wait()
或waitpid()
这样的阻塞调用。需要(最好是)一个非阻塞系统调用,它只会检查此pid是否仍在运行并返回子进程的状态。
最佳和最简单的方法是什么?
我有一个分叉进程的pid。现在,从我的c代码(在Linux上运行)中,我必须定期检查这个进程是否仍在运行或已终止。我不想使用像wait()
或waitpid()
这样的阻塞调用。需要(最好是)一个非阻塞系统调用,它只会检查此pid是否仍在运行并返回子进程的状态。
最佳和最简单的方法是什么?
waitpid
只能用于调用它的进程的子进程,而且它们的 pid 只有在被等待后才能被回收,因此这是检查子进程是否已终止的正确方法。 - Artkill(pid, 0);
SIGCHLD
处理程序,这不依赖于可能被回收的PID。waitpid
的调用之外,几乎所有使用pid的情况都可能存在潜在危险的竞态条件。 - Art在 waitpid()
中使用 WNOHANG
选项。