0

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

即,我得到这样的东西:

Enter info: <OUTPUT FROM CHILD>
_

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

由于我试图让我的父进程分叉许多同时运行的子进程(每个子进程都基于用户提供的信息),所以我不能等待子进程结束,然后让父进程继续。有没有办法让父母在继续之前等待孩子的一部分完成?

4

2 回答 2

0

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

于 2013-11-04T01:01:47.330 回答
0

很大程度上取决于您真正想要做什么,但您不能使用waitpid()wait()等待部分过程完成。wait 系列函数等待垂死的进程,或因信号(SIGSTOP、SIGTTIN、SIGTTOU 等)而停止的进程。

一些问题:

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

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

于 2013-11-03T00:50:49.643 回答