fork()创建进程

CharCollins 2012-01-02 07:19:43
求帮助,关于UNIX下的进程问题
程序void main(){
int a=10;
printf("a=%d\n",a);
fork();
a+=10;
printf("a=%d\n",a);
fork();
a+=10;
printf("a=%d\n",a);
}
问程序从初始运行到全部结束,系统一共创建了几个进程???
...全文
195 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
binghunjin 2013-02-04
  • 打赏
  • 举报
回复
有收获,谢谢!
CharCollins 2012-01-04
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 cliffbaby 的回复:]

不是的吧。

wait只是会暂时停止目前进程的执行,直到有信号来到或子进程结束。
我认为应该是:
10 (父)
20 (子1)
30 (子2)
30 (子1)
20 (父)
30 (子3)
30 (父)
[/Quote]
谢谢,学习了
子谋 2012-01-03
  • 打赏
  • 举报
回复
一共创建了3个子进程……
由于fork函数的特性是执行一次返回两次,所以嵌套使用后,printf的执行次数是:2^n-1次……
也就是:2^3-1=7次……
cliffbaby 2012-01-03
  • 打赏
  • 举报
回复
不好意思,网速卡了下,发了两次。
cliffbaby 2012-01-03
  • 打赏
  • 举报
回复
不是的吧。

wait只是会暂时停止目前进程的执行,直到有信号来到或子进程结束。
我认为应该是:
10 (父)
20 (子1)
30 (子2)
30 (子1)
20 (父)
30 (子3)
30 (父)
cliffbaby 2012-01-03
  • 打赏
  • 举报
回复
不是的吧。

wait只是会暂时停止目前进程的执行,直到有信号来到或子进程结束。
应该是:
10 (父)
20 (子1)
30 (子2)
30 (子1)
20 (父)
30 (子3)
30 (父)
CharCollins 2012-01-03
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 charcollins 的回复:]
是这样理解。调用fork()后有新进程1,子进程1和父进程main都会执行fork()后面的语句,所以a=20打两次(其中main打印一次,子线程也打),并且又有fork()所以ma……
[/Quote]
没有让子线程终止,所以就会嵌套,这是我的理解
如果改成
void main(){
int a=10;
printf("a=%d\n",a);
fork();
a+=10;
wait();
printf("a=%d\n",a);
fork();
a+=10;
wait();
printf("a=%d\n",a);
}
结果是不是
a=10
a=20
a=30

请问楼上的大牛是不是这样的???
CharCollins 2012-01-03
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 mesh4444 的回复:]

一共创建了3个子进程……
由于fork函数的特性是执行一次返回两次,所以嵌套使用后,printf的执行次数是:2^n-1次……
也就是:2^3-1=7次……
[/Quote]
是这样理解。调用fork()后有新进程1,子进程1和父进程main都会执行fork()后面的语句,所以a=20打两次(其中main打印一次,子线程也打),并且又有fork()所以main和1又建新线程2,3,而main,1,2,3都要打印所以就4次了。
cliffbaby 2012-01-03
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 mesh4444 的回复:]
一共创建了3个子进程……
由于fork函数的特性是执行一次返回两次,所以嵌套使用后,printf的执行次数是:2^n-1次……
也就是:2^3-1=7次……
[/Quote]

对,创建3个, 加上父进程,一共有4个进程
cliffbaby 2012-01-02
  • 打赏
  • 举报
回复
一共4个吧。 怎么会7个呢?
Patricksolo 2012-01-02
  • 打赏
  • 举报
回复
一共创建了3个新的进程。LS看错了吧,只写了2个fork哦
AlburtHoffman 2012-01-02
  • 打赏
  • 举报
回复
1+2+4共7个进程啊
CharCollins 2012-01-02
  • 打赏
  • 举报
回复
补充一下,程序运行结果是
a=10
a=20
a=20
a=30
a=30
a=30
a=30
CharCollins 2012-01-02
  • 打赏
  • 举报
回复
请问为什么啊???
philip_puma 2012-01-02
  • 打赏
  • 举报
回复
1 + 2

4,438

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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