分叉处理执行顺序

时间:2016-09-28 19:53:20

标签: c fork

我知道还有另一个同名的帖子,但这实际上是一个不同的问题。

当一个进程多次分叉时,父进程是否在子进程之前完成?反之亦然?同时?

这是一个例子。假设我有一个for循环,将1个父进程分成4个子进程。在for循环结束时,我希望父进程通过管道向子进程提供一些数据。数据被写入每个子进程'相应的标准输入。

在任何孩子执行他们的代码之前,父母会先发送数据吗?这很重要,因为我们不希望它从无效的标准输入开始工作。

3 个答案:

答案 0 :(得分:6)

执行的顺序由特定的OS调度策略决定,并且不受任何保证。为了使进程同步,存在用于此目的的进程间通信(IPC)的特殊设施。提到的管道就是一个例子。它们使读取过程实际等待,以便其他进程编写它,创建一个(单向)同步点。其他例子是FIFO和套接字。对于更简单的任务,可以使用wait()函数族或signals

答案 1 :(得分:1)

  

当一个进程多次分叉时,父进程是否在子进程之前完成?反之亦然?同时? -

同时依赖于调度程序及其不可预测性。

Using pipe to pass integer values between parent and child

此链接详细说明了父进程和子进程之间共享数据。 由于您有四个子进程,因此您可能需要在每个子进程之间创建不同的单独管道。

写入管道的每个数据字节将只读取一次。在管道的读取端打开的情况下,它不会复制到每个进程。

Multiple child processes reading/writing on the same pipe

或者,您可以尝试使用共享内存进行数据传输。

答案 2 :(得分:0)

它们将同时执行。这基本上就是流程的重点。

查看互斥锁或其他处理并发的方法。