关于fork函数的一个问题

yueye30121 2012-02-20 08:30:55
mian()
{
int i,n;
for(i=0;i<3;i++)
{
n=fork();
if(n>0)
{
}
else
{
}
}
while(1);
}
在linux下运行这个程序总共可以有几个进程产生?
为什么?
...全文
121 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
yueye30121 2012-02-20
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 tsh185 的回复:]
你 子进程里面是空的啦,他就跑到 for 去了啦
[/Quote]
这句话重点,明白了,谢谢哈
tsh185 2012-02-20
  • 打赏
  • 举报
回复
看看 《深入理解计算机系统》 这本书 对你这个问题有分析

是编程相关的,很经典的
tsh185 2012-02-20
  • 打赏
  • 举报
回复
你 子进程里面是空的啦,他就跑到 for 去了啦
yueye30121 2012-02-20
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 kuzuozhou 的回复:]
哈哈 笑死了 楼主把main()写成“面”了
[/Quote]
笔误,见笑了
yueye30121 2012-02-20
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 tsh185 的回复:]
肯定啦 , fork 有继承的特性啦
[/Quote]
子进程的运行应该从fork()后开始呀!
tsh185 2012-02-20
  • 打赏
  • 举报
回复
是的 是的
yueye30121 2012-02-20
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 tsh185 的回复:]
i= 0 =》 2 个进程
i= 1 =》 4 个进程
i = 2 =》 8 个进程
[/Quote]
也就是说子进程会从for循环那开始了?
tsh185 2012-02-20
  • 打赏
  • 举报
回复
fork 就是两个 在 fork 函数之前代码一样的程序
tsh185 2012-02-20
  • 打赏
  • 举报
回复
肯定啦 , fork 有继承的特性啦
yueye30121 2012-02-20
  • 打赏
  • 举报
回复
子进程还会执行for循环吗?
tsh185 2012-02-20
  • 打赏
  • 举报
回复
i= 0 =》 2 个进程
i= 1 =》 4 个进程
i = 2 =》 8 个进程

pengfoo 2012-02-20
  • 打赏
  • 举报
回复
哈哈 笑死了 楼主把main()写成“面”了
jialejiahi 2012-02-20
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 yueye30121 的回复:]

既然子进程在for循环里面,而for循环的代码是父进程的,也就是父进程只是产生子进程而已,子进程什么都不会做,到了while(1)的时候循环而已,为什么子进程还能产生子进程呢?
我的问题重点是不知道为什么父进程产生了子进程,为什么子进程还能产生进程呢?
[/Quote]
因为子进程copy了父进程的一切,数据段,代码段,堆栈...
这个循环的过程和循环变量也是被拷贝了的。
yueye30121 2012-02-20
  • 打赏
  • 举报
回复
8个我也知道,但是为什么是8个
yueye30121 2012-02-20
  • 打赏
  • 举报
回复
既然子进程在for循环里面,而for循环的代码是父进程的,也就是父进程只是产生子进程而已,子进程什么都不会做,到了while(1)的时候循环而已,为什么子进程还能产生子进程呢?
我的问题重点是不知道为什么父进程产生了子进程,为什么子进程还能产生进程呢?
yueye30121 2012-02-20
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 jialejiahi 的回复:]
8个,老问题了,翻翻以前的帖子吧。
[/Quote]
子进程从哪开始运行?是fork()函数之后还是调用fork()函数?
tsh185 2012-02-20
  • 打赏
  • 举报
回复
8 个
jialejiahi 2012-02-20
  • 打赏
  • 举报
回复
8个,老问题了,翻翻以前的帖子吧。

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧