linux fork系统调用

Ana*_*kar 5 linux fork

最近,我在一家着名的IT公司面临技术面试.面试官问我,如果给出以下3个不同的fork系统调用调用,将创建多少个进程:

  1. 叉子()

  2. fork()
    fork()

  3. fork()
    fork()
    fork()

首先回答的是明显的2个过程.
第二个将开始3个过程.
在第3个我告诉的是5个过程,面试官不同意并且说7个.
我无法弄清楚它是如何创建7个过程的.
请帮忙.

Duc*_*uck 6

您需要确定采访者是关于全部流程还是创建流程.这是forkposix系统上的一种简单技术(在大多数这些难题中).

int main(int argc, char *argv[])
{
    fork();
    printf("%d\n", getpid());
    fork();
    printf("%d\n", getpid());
    fork();
    printf("%d\n", getpid());

    return(0);
}
Run Code Online (Sandbox Code Playgroud)

然后运行它: pgm | sort | uniq

9314
9317
9318
9319
9320
9321
9322
9323
Run Code Online (Sandbox Code Playgroud)

总共8个进程,7个创建进程.


Tom*_*ace 0

以下链接是有关此主题的另一个堆栈溢出质量检查,可能有助于您清除问题。

Unix 上 fork() 多个进程的问题

该人调用了 5 次 fork(),最终生成了 31 个新进程。(2^forks-1原始进程)