最近,我在一家着名的IT公司面临技术面试.面试官问我,如果给出以下3个不同的fork系统调用调用,将创建多少个进程:
叉子()
fork()
fork()
fork()
fork()
fork()
首先回答的是明显的2个过程.
第二个将开始3个过程.
在第3个我告诉的是5个过程,面试官不同意并且说7个.
我无法弄清楚它是如何创建7个过程的.
请帮忙.
您需要确定采访者是关于全部流程还是创建流程.这是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个创建进程.
以下链接是有关此主题的另一个堆栈溢出质量检查,可能有助于您清除问题。
该人调用了 5 次 fork(),最终生成了 31 个新进程。(2^forks-1原始进程)
| 归档时间: |
|
| 查看次数: |
438 次 |
| 最近记录: |