等待部分子进程完成?

时间:2013-11-02 22:17:02

标签: c fork wait

我在循环中有一个fork,在fork之上我提示用户输入。在我的分叉过程中,还有一些打印。因为无法保证流程的运行顺序,所以我经常(或者总是)从子流程中获取行,在我对用户的提示和他们可以输入信息的地方之间打印。

即,我得到这样的东西:

Enter info: <OUTPUT FROM CHILD>
_

(其中_表示用户可以自由输入输入。)

由于我正在尝试允许我的父进程分叉多个子进程(每个进程基于用户给出的信息)同时运行,我不能等待子进程在让父进程继续之前结束。有没有办法让父母等待孩子的一部分完成才能继续前进?

2 个答案:

答案 0 :(得分:0)

很大程度上取决于您真正想要做的事情,但您无法使用waitpid()wait()等待部分流程完成。等待函数系列等待由于信号(SIGSTOP,SIGTTIN,SIGTTOU等)而导致停止的进程或进程停止。

有些问题:

  • 是否应将子进程的输出发送到屏幕,这会导致这种混淆,还是应该将其发送到文件?
  • 或者,程序是否应该有来自每个孩子的管道,以便它可以读取孩子的输出并在方便时将其显示在屏幕的适当部分?
  • 或者,在窗口环境中,是否应将孩子的消息发送到不同的窗口(如控制台窗口)?
  • 或者孩子们应该写信给syslog守护进程吗?
  • 或者孩子们应该挂在SIGTTOU信号上吗?

很大程度上取决于消息的目的,以及立即显示消息的重要性。

答案 1 :(得分:0)

其他答案肯定更一般,解决这个问题的正确方法会涉及某种管道,但我的情况实际上非常简单,只需要父母等待一段时间,所以我添加了一个{ {1}}行,让父母等待几毫秒让孩子完成打印。它绝对不是完美的,但它确实有效。