最近,我在一家著名的IT公司接受了一次技术面试。面试官问我,如果给出以下3种不同的分叉系统调用,将创建多少进程:
第一个过程的答案是明显的两个过程。
第二步将启动3个过程。
我告诉你的第三个过程是5个过程,面试官不同意,说是7个过程。
我不知道它是如何创建7个进程的。
请帮帮忙。
发布于 2013-12-08 06:50:06
你需要确定面试官是整个过程还是创造的过程。这是posix系统上的一种简单技术(在大多数这些fork难题中)。
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
9314
9317
9318
9319
9320
9321
9322
93238整个过程,7个已创建的过程。
发布于 2013-12-08 06:41:25
第三项:
fork()
fork()
fork()在第一个分叉之后,您有两个进程。因此第二个分叉由两个进程调用。因此,在第二叉()之后有4个进程。第三个叉子由所有4个进程调用,创建了另外4个进程。因此,总共有8个进程,其中创建了7个进程。
因此,对于n个分叉,将有一个2^n进程,其中2^n-1进程是由于分叉而创建的。
发布于 2013-12-08 06:38:12
下面的链接是关于这个主题的另一个堆栈溢出Q-A,可能会帮助您清除问题.
Problem forking fork() multiple processes Unix
这个人有5个对fork()的调用,最终产生了31个新进程。(2^叉-1原工艺)
https://stackoverflow.com/questions/20450565
复制相似问题