在此代码中将从fork()创建多少个进程?

问题描述 投票:-1回答:2

这是我的一项任务提出的问题,对此我有些困惑。

int main() 
{ 
  printf("line\n");
  pid_t pid = fork();
  fork();
  fork();
  if(pid == 0)
    fork();

  fork();
  printf("line\n");
  return 0; 
} 

通过执行代码将创建多少个进程?

通过执行代码,它将生成28行输出,只是不确定如何找到在此语句中创建的进程数量。

c multithreading process fork
2个回答
1
投票

总共有24个过程。这是方法。

在第一个fork()之后,有两个过程。其中之一pid == 0;在另一个过程pid != 0中。

[在第二次分叉之后,有4个过程(其中一半具有pid == 0)。

[在第三次分叉之后,有8个进程(其中一半有pid == 0)。

第四个fork语句仅由其中pid == 0的那些进程执行。因此,将有4个进程执行fork(并变成8个进程)。其他4个进程将不会执行fork,而将保持4个进程。总共我们有8 + 4 = 12个进程。

最后,另一个分支将我们的12个过程变成24个。

通过执行代码将创建多少个线程?

现在是语义问题。您是否说进程不是线程,所以创建了[[0线程?您是否说在24个进程中,第一个是原始进程,不是由该代码创建的,因此总共创建了23个进程?这是一个语义问题,而不是软件问题,因此我们不能为您提供帮助。

打印的行数

第一个printf仅由原始进程执行(因为它尚未分叉)。第二个printf由所有24个进程执行(正好在每个进程终止之前)。因此总共打印了25行。

0
投票
enter image description here

如上所述,将产生24个叶子。因此,将最终产生24个过程。在第一个分叉之前,将打印“行”一次。 fork之后,由于24个过程,将打印24个“行”。因此,您将有25条“行”。

© www.soinside.com 2019 - 2024. All rights reserved.