系统编程 - Fork()方法

时间:2012-04-15 19:44:11

标签: c++ c unix operating-system fork

我正在研究系统编程系统调用。我的作业中有一个代码块(如下所示)。问题是我要打印多少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;
}

5 个答案:

答案 0 :(得分:6)

fork系统调用很特别。你打电话一次,然后再打两次。一旦进入孩子,一次进入父母。

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

答案 1 :(得分:3)

fork0返回到子进程,将子进程的pid返回给父进程。手册页应该清除其他所有内容。

答案 2 :(得分:2)

Fork返回2个值:

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

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

答案 3 :(得分:1)

在父进程案例中未初始化

pid2。将打印多少B是未定义的行为。

pid=fork()无法再次执行main(),希望......

答案 4 :(得分:0)

他返回Fork调用的值会返回一个不同的值,具体取决于你当前的进程。

假设您希望在父进程中执行一些代码,您将在此条件块中填充该部分代码:

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

如果你想在子进程中执行一些代码,那么同样适用:

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

其余的(由父母进程和孩子执行)在一个else块中。