首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >linux分叉系统调用

linux分叉系统调用
EN

Stack Overflow用户
提问于 2013-12-08 06:26:18
回答 4查看 486关注 0票数 5

最近,我在一家著名的IT公司接受了一次技术面试。面试官问我,如果给出以下3种不同的分叉系统调用,将创建多少进程:

  1. 叉()
  2. 叉() 叉()
  3. 叉() 叉() 叉()

第一个过程的答案是明显的两个过程。

第二步将启动3个过程。

我告诉你的第三个过程是5个过程,面试官不同意,说是7个过程。

我不知道它是如何创建7个进程的。

请帮帮忙。

EN

回答 4

Stack Overflow用户

发布于 2013-12-08 06:50:06

你需要确定面试官是整个过程还是创造的过程。这是posix系统上的一种简单技术(在大多数这些fork难题中)。

代码语言:javascript
复制
int main(int argc, char *argv[])
{
    fork();
    printf("%d\n", getpid());
    fork();
    printf("%d\n", getpid());
    fork();
    printf("%d\n", getpid());

    return(0);
}

然后运行它为:pgm | sort | uniq

代码语言:javascript
复制
9314
9317
9318
9319
9320
9321
9322
9323

8整个过程,7个已创建的过程。

票数 6
EN

Stack Overflow用户

发布于 2013-12-08 06:41:25

第三项:

代码语言:javascript
复制
fork()
fork()
fork()

在第一个分叉之后,您有两个进程。因此第二个分叉由两个进程调用。因此,在第二叉()之后有4个进程。第三个叉子由所有4个进程调用,创建了另外4个进程。因此,总共有8个进程,其中创建了7个进程。

因此,对于n个分叉,将有一个2^n进程,其中2^n-1进程是由于分叉而创建的。

票数 3
EN

Stack Overflow用户

发布于 2013-12-08 06:38:12

下面的链接是关于这个主题的另一个堆栈溢出Q-A,可能会帮助您清除问题.

Problem forking fork() multiple processes Unix

这个人有5个对fork()的调用,最终产生了31个新进程。(2^叉-1原工艺)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20450565

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档