C waitpid,这矛盾吗?

C waitpid, is this a contradiction?

在我之前的问题中:

您向我展示了如何检查子进程是否已完成,代码是这样的:

pid_t r = waitpid(pid, &status, WNOHANG)//if r==pid then process finished

如果我想等待进程完成怎么办(假设它仍然是 运行)?

我在网上看到解决方法是一样的,即:

pid_t r = waitpid(pid, &status, WNOHANG)

这是否意味着我们对 2 个不同的作业有相同的命令?这对我来说没有意义。

我不知道你在哪里读到 waitpid(pid, &status, WNOHANG) 块,但这是错误的。要阻塞直到进程结束*,请使用

waitpid(pid, &status, 0)

来自 waitpid 的手册页:

All of these system calls are used to wait for state changes in a child of the calling process

WNOHANG 覆盖它。

WNOHANG return immediately if no child has exited.


* 如果您有信号处理程序,当被信号中断时它也可以 return(错误 EINTR)。