2

我有以下代码,并被问到将打印多少次“A”、“B”、“C”、“D”、“E”

fun() {
  printf("A");
  fork();
  printf("B");
  if (fork() != 0) {
     printf("C");
     fork();
     printf("D");
  }
  printf("E");
}

所以应该是:

A
A 
B
E

我不确定我上面的回答是否正确?这条线if(fork() !=0 )做什么?

4

3 回答 3

6

文档中:

成功时,父进程返回子进程的PID,子进程返回0。失败时,在父进程中返回 -1,不创建子进程,并适当设置 errno。

于 2012-12-09T22:12:03.780 回答
4

1 线程打印 a,2 线程打印 b。2 个 fork 中的每一个,但只有 2 个父级进入 if 语句并打印 c。这两个 fork 中的每一个和所有 4 个 proc 都打印 d。然后,6 个进程中的每一个(来自 if-fork 的两个子进程和来自 if print e 的 4 个线程。

您无法确定顺序,但每个字母的数量为:

一个 x1

乙×2

c x2

d x4

e x6

于 2012-12-09T22:19:53.020 回答
2

该行if (fork() != 0) { ... }正在检查以确保当前进程不是原始分叉进程的子进程。只有父进程会执行此块中的代码。

这是有效的,因为fork()在父进程中返回 PID,在子进程中返回 0,错误时返回 -1。

于 2012-12-09T22:17:21.823 回答