2

我正在研究系统编程系统调用。我的作业中有一个代码块(如下所示)。这个问题问我要打印多少个 A、B 或 C。我的问题是什么意思if(pid == 0)?我猜if(pid == 0)意思是假的,所以我分析会打印 2 x A 和 2 x B。我写还是?第二个问题是pid2 = fork()再次执行 main 吗?

int main()
{
  int pid,pid2;
  int i;
  pid = fork();
  printf("A\n");
  if (pid == 0)
    pid2=fork();
  if (pid2)
    printf("B\n");
  printf("C\n");
  return 0;
}
4

5 回答 5

6

系统fork调用很特殊。您调用它一次,它会返回两次。一次在孩子身上,一次在父母身上。

在父进程中,它返回子进程的 pid,在子进程中返回 0。因此,if (pid == 0)表示“如果这是子进程”。

于 2012-04-15T19:46:23.833 回答
3

fork返回0子进程,子进程的pid返回父进程。手册页应该清除所有其他内容。

于 2012-04-15T19:46:21.380 回答
2

分叉返回 2 个值:

  • 子进程中为 0,父进程中为正值。
  • 在 fork() 调用之后,您将有 2 个进程(如果没有发生错误,则返回 -1)。

在您的示例中,您创建了 3 个进程并将输出 2A、1B 和 3C

于 2012-04-15T19:49:11.687 回答
1

pid2在父流程案例中未初始化。B将打印多少是未定义的行为。

pid=fork()不会main()再次执行,希望...

于 2012-04-15T20:45:17.270 回答
0

he return value of the Fork call returns a different value depending in which proccess you currently are.

Let's say you want some code to be executed in the parent process you would pu that part of the code in this condition block :

p = fork();
if (p > 0)
{
    // We're the parent process
}

And if you want to execute some code in the child process the same would apply :

p = fork();
if (0 == p)
{
    // We're the child process
}

And the rest (executed by both parents process and child) in a else block.

于 2012-04-15T19:52:17.410 回答