父进程如何等待所有子进程完成然后在收到 SIGINT 时退出?
我正在用 C 编写一个多进程程序。
我希望父进程可以等待所有子进程完成然后退出 它收到 SIGINT。
我有两个问题。
父母如何记录它分叉的子进程的每个pid。 子进程可能会在记录功能运行之前完成 主要流程。
如果父母不知道它有多少个子进程。他怎么能等 所有子进程完成。
提前致谢。
I'm writing a multi process program in C.
I hope parents process can wait all child processes finish then exit when
it receives SIGINT.
I have two questions.
How can parents record each pid of child process it forked.
Child process may finish before recording function run on
main process.If parents has no idea about how many child processes it has. How can he wait
all child process finish.
Thanks in advance.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您在派生子进程时记录子进程的 pid(如果需要)。
在 pid = 0 的循环中调用
waitpid
,它将返回退出进程的 pid 或返回 -1,如果 errno =ECHILD
则表示您没有剩余的从属进程。You record the pid of child processes as you fork them (if required).
call
waitpid
in a loop with pid = 0 it will either return a pid of a process that exited or return -1 and if errno =ECHILD
you have no slaves left.继续循环调用 wait(2)。每次 wait() 返回时,您都会获得已退出子进程的 PID 及其状态。状态会告诉您它是正常退出(带有退出代码)还是由于信号退出。像这样的东西(未测试):
Keep calling wait(2) in a loop. Every time wait() returns, you'll get back the PID of the exited child and its status. The status will tell you, whether it exited normally (with an exit code) or due to a signal. Something like this (not tested):