如何使用 fork() 知道代码中的输出?

How to know the output in the code with fork()?

#include <unistd.h>
#include <sys/wait.h>
int main ()
{
    W(A);
    int child=fork();
    W(B);
    if (child)
      wait(NULL);
    W(C);
}

我认为 ABBCC 将是输出之一,但也是下一个:ACCBB、ABB、ABCBC、ABCAA 应该是正确的。 W表示写,W(A)、W(B)、W(C)表示写A、B、C。请帮忙。

ACCBB 不可能。

我会为parent打印的字母添加下标p,child会添加c ].

parent进程打印ApBpCp在该顺序,child 进程按该顺序打印 BcCc

Ap 将首先打印,因为它是在分叉之前打印的。 parent 在打印 Cp 之前等待 child 退出,因此它必须排在最后。所以这意味着第一个和最后一个字符是 AC.

在这之间,两个进程之间的执行顺序没有任何限制。所以以下是可能的:

BpBcCc
BcBpCc
BcCcBp

前两个在输出中看起来相同,因为我们无法区分 Bp 和 Bc

所以可能的结果是:

ABBCC
ABCBC

这一切都假设没有可能延迟输出的缓冲。 IE。这只是一个检查语句在并发进程中执行顺序的练习,并不是关于 I/O.