最近我参加了一家知名IT公司的技术面试。 面试官问我下列3个不同的fork系统调用调用时会创建多少进程:
fork()
fork()
fork()fork()
fork()
fork()
第一个问题的答案显然是2个进程。
第二个问题将启动3个进程。
但是对于第三个问题,我回答是5个进程,面试官不同意,并说它是7个进程。
我无法想象如何创建7个进程。
请帮忙。
最近我参加了一家知名IT公司的技术面试。 面试官问我下列3个不同的fork系统调用调用时会创建多少进程:
fork()
fork()
fork()
fork()
fork()
fork()
第一个问题的答案显然是2个进程。
第二个问题将启动3个进程。
但是对于第三个问题,我回答是5个进程,面试官不同意,并说它是7个进程。
我无法想象如何创建7个进程。
请帮忙。
你需要向面试官明确确认是总进程数还是已创建的进程数。在大多数这类基于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);
}
And then just run it as: pgm | sort | uniq
9314
9317
9318
9319
9320
9321
9322
9323
总共有8个进程,其中7个是已创建的。
fork()
fork()
fork()
在@Duck的想法上延伸,您可以在命令行上进行简单的实验
perl -le'fork; fork; fork; print $$' # $$ is the pid
这应该产生类似于
6792
6795
6796
6797
6798
6799
6800
6801