如何检查所有子进程是否结束?

How to check if all child processes ended?

我正在尝试创建一个作业,我想在其中检查学生创建的所有子进程是否已退出。因为我没有调用 fork,所以我无权访问线程 ID。有没有办法在不知道创建的子进程的线程 ID 的情况下检查当前进程是否没有任何子进程?

我检查了很多问题,但每个解决方案都包含使用来自 fork 调用的 return 值。感谢您的帮助。

谢谢。

您可以拨打

int st = waitpid(-1, NULL, WNOHANG);

第一个参数告诉 waitpid() 等待任何 child 进程退出,而不是特定的 pid。

第三个参数是一个标志,它使 waitpid() return 立即而不是阻塞。

现在有三种可能的结果:

  • return 值为 -1errnoECHILD:这意味着根本没有 child 进程存在
  • return值为>0:这表示,child过去已经退出,但return值尚未收集(so-called 僵尸进程)。现在迭代该过程(再次调用 waitpid())。
  • return 值为 0:在这种情况下,有 child 个可用进程仍然 运行。

这应该涵盖您要求的所有情况。