-2

我不知道在 fork 中首先执行什么。例如我有这个代码:

int main() {
   int n = 1;
   if(fork() == 0) {
      n = n + 1;
      exit(0);
   }
   n = n + 2;
   printf(“%d: %d\n”, getpid(), n);
   wait(0);
   return 0;
}

这会在屏幕上打印什么?

1: 3
0: 4

或者

0: 4
1: 3
4

3 回答 3

4

它没有具体说明。由操作系统调度程序决定首先调度哪个进程。

After a fork(), it is indeterminate which process—the parent
or the child—next has access to the CPU. On a multiprocessor system,
they may both simultaneously get access to a CPU.
于 2013-06-30T08:44:14.270 回答
3

当我运行这个程序时,它只打印一行,而不是两行,因为它exit()fork()'s 块中。

所以问题是,你是否忘记了printf()'fork()块中的 a ,还是不应该在exit()那里?

于 2013-06-30T08:52:37.827 回答
0

如果您想让一个进程在另一个进程之前运行,请尝试使用 sleep() 系统调用。

于 2013-06-30T08:51:41.780 回答