温馨提示:本文翻译自stackoverflow.com,查看原文请点击:c - How to check if all child processes ended?
c pthreads fork child-process pid

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

发布于 2020-03-27 16:08:06

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

我检查了许多问题,但每个解决方案都包含使用fork调用的返回值。任何帮助表示赞赏。

谢谢。

查看更多

查看更多

提问者
Mandar Sadye
被浏览
21
Ctx 2020-01-31 17:20

你可以打电话

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

第一个参数告诉waitpid()您等待所有子进程退出,而不是等待特定的pid。

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

现在有三种可能的结果:

  • 返回值为is -1errnois ECHILD:这意味着根本没有子进程存在
  • 返回值是>0:这表示一个孩子过去已经退出,但尚未收集返回值(所谓的僵尸进程)。现在重复该过程(waitpid()再次调用)。
  • 返回值为0:在这种情况下,仍有一些子进程仍在运行。

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