系统编程 - fork() 方法

System Programming - Fork() Method

本文关键字:方法 fork 编程 系统      更新时间:2023-10-16

我正在研究系统编程系统调用。我的作业中有一个代码块(如下所示)。这个问题问我将打印多少个 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("An");
  if (pid == 0)
    pid2=fork();
  if (pid2)
    printf("Bn");
  printf("Cn");
  return 0;
}

fork系统调用是特殊的。你调用它一次,它返回两次。一次在孩子身上,一次在父母身上。

在父项中,它返回子项的 pid,在子项中返回 0。因此,if (pid == 0)的意思是"如果这是孩子"。

fork

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

Fork 返回 2 个值:

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

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

pid2

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

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

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

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

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

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

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

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