当前位置: 技术问答>linux和unix
fork()函数问题
来源: 互联网 发布时间:2016-06-08
本文导语: 程序1: #include main() { fork(); fork(); } 程序2: #include main() { fork(); fork(); fork(); fork(); } 程序一产生了4个进程,而程序二产生了8个进程, 请问一下,为什么??? 请教!!! | 第一个程序产生4...
程序1:
#include
main()
{
fork();
fork();
}
程序2:
#include
main()
{
fork();
fork();
fork();
fork();
}
程序一产生了4个进程,而程序二产生了8个进程,
请问一下,为什么???
请教!!!
#include
main()
{
fork();
fork();
}
程序2:
#include
main()
{
fork();
fork();
fork();
fork();
}
程序一产生了4个进程,而程序二产生了8个进程,
请问一下,为什么???
请教!!!
|
第一个程序产生4个对,第二个应该产生16个才对。
fork();//1个进程编程了2个
fork();//2个进程都执行fork(),2个进程变成了4个
fork();//4个进程都执行fork(),4个进程变成了8ge
。。。。
fork();//1个进程编程了2个
fork();//2个进程都执行fork(),2个进程变成了4个
fork();//4个进程都执行fork(),4个进程变成了8ge
。。。。
|
例子2 我觉得应该产生16个进程啊
fork()会对子进程进行保存环境,然后继续执行父进程,某一时刻子进程会被调度的
fork()-> p -> fork()-> pp ->fork()-> ppp -> fork()-> pppp same process +1
-> pppc +1
ppc -> fork() -> ppcp same one +1
-> ppcc +1
pc ->fork()-> pcp -> fork() -> pcpp +1
-> pcpc +1
-> pcc -> fork() -> pccp +1
-> pccc +1
c -> fork() -> cp -> fork() -> cpp -> fork() -> cppp +1
-> cppc +1
cpc -> fork() -> cpcp +1
-> cpcc +1
cc -> fork() -> ccp -> fork() -> ccpp +1
-> ccpc +1
ccc -> fork() -> cccp +1
-> cccc +1
fork()会对子进程进行保存环境,然后继续执行父进程,某一时刻子进程会被调度的
fork()-> p -> fork()-> pp ->fork()-> ppp -> fork()-> pppp same process +1
-> pppc +1
ppc -> fork() -> ppcp same one +1
-> ppcc +1
pc ->fork()-> pcp -> fork() -> pcpp +1
-> pcpc +1
-> pcc -> fork() -> pccp +1
-> pccc +1
c -> fork() -> cp -> fork() -> cpp -> fork() -> cppp +1
-> cppc +1
cpc -> fork() -> cpcp +1
-> cpcc +1
cc -> fork() -> ccp -> fork() -> ccpp +1
-> ccpc +1
ccc -> fork() -> cccp +1
-> cccc +1
|
你可以试一试:
ps -ef|grep test
int main(int argc, char * argv[])
{
fork();
fork();
fork();
fork();
sleep(20);
return 0;
}
ps -ef|grep test
|
楼主,你这是不负责任的迭代。
你4个fork,迭代了8个返回。
一共16个进程。
fork后一定要判断pid,保证进程的条件跳转。
你4个fork,迭代了8个返回。
一共16个进程。
fork后一定要判断pid,保证进程的条件跳转。
|
楼上,结果应该是16个A
|
test是你编译后的程序
|
我是来学习的……