问题描述
在我之前的问题中:How to check if a process has been finished?
您向我展示了如何检查子进程是否已完成,代码如下:
pid_t r = waitpid(pid,&status,WNOHANG)//if r==pid then process finished
如果我想等待进程完成(假设它仍在运行)怎么办?
我在网上看到解决方案是一样的,即:
pid_t r = waitpid(pid,WNOHANG)
这是否意味着我们对 2 个不同的工作有相同的命令?这对我来说没有意义。
解决方法
我不知道你在哪里读到 waitpid(pid,&status,WNOHANG)
块,但这是错误的。要阻塞直到进程结束*,请使用
waitpid(pid,0)
来自 waitpid
的手册页:
所有这些系统调用都用于等待调用进程的子进程的状态变化
WNOHANG
会覆盖它。
WNOHANG
如果没有孩子退出,则立即返回。
* 如果您有信号处理程序,它也可以在被信号中断时返回(错误 EINTR
)。