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
)。
在我之前的问题中:
您向我展示了如何检查子进程是否已完成,代码是这样的:
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
)。