来看看这个fork的问题

dk_zhe 2012-07-05 05:33:10
#include<stdio.h>
void main()
{
printf("my pid is %d.\n",getpid());
fork();
sleep(1);
fork();
sleep(1);
fork();
sleep(1);
printf("my pid is %d.\n",getpid());
}
猜猜运行这个代码结果如何,为什么。楼主有点蒙了。
...全文
154 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
dk_zhe 2012-07-05
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

for()是新建一个子进程,子进程内容复制于父进程继续执行fork下面的代码,除非exit
void main()
{
printf("my pid is %d.\n",getpid());//输出进程id假如父进程id是1000
fork();//新建子进程id是1001
sleep(1);
fork();//父进程1000和子进程1001同时再建子进程,如……
[/Quote]解释得很清楚
wsd3wsdsd 2012-07-05
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20120705/18/64c1c7bc-68d6-4015-941d-ecc7e584cb8b.html?38569
帮看下这贴
zzustd 2012-07-05
  • 打赏
  • 举报
回复
回帖还不能显示空格,说明下,上面的1005是由进程1001产生的
zzustd 2012-07-05
  • 打赏
  • 举报
回复
for()是新建一个子进程,子进程内容复制于父进程继续执行fork下面的代码,除非exit
void main()
{
printf("my pid is %d.\n",getpid());//输出进程id假如父进程id是1000
fork();//新建子进程id是1001
sleep(1);
fork();//父进程1000和子进程1001同时再建子进程,如生成子进程id分别是1002和1003,已经有四个进程了
sleep(1);
fork();//上面四个进程sleep后同时再建四个进程,现在有八个进程
sleep(1);
printf("my pid is %d.\n",getpid());//看到输出子进程id八次
}
1000----1001----1003----1006
| |
| |-------------1005
|
|---------------1002----1007
|
|-----------------------1004
显示九次输出,第一个进程id显示2次,其他子进程id显示1次,后面无序,进程的执行顺序由系统时间片随机决定,不知楼主能看明白不?
dk_zhe 2012-07-05
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

fork 3次,一个有2^3=8个进程,加上一开始打印的一个,一共9个。
[/Quote]为什么啊,我算感觉是12个啊,但确实是9个
qiuhui00 2012-07-05
  • 打赏
  • 举报
回复
fork 3次,一个有2^3=8个进程,加上一开始打印的一个,一共9个。
dk_zhe 2012-07-05
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

不确定是什么,看哪个进程先执行就打印哪个进程的pid
[/Quote]总共输出了9行,但不知道为什么。
qixing1115 2012-07-05
  • 打赏
  • 举报
回复
运行结果就是输出一堆:my pid isXXX
估计得十多次吧,可能更多
qiuhui00 2012-07-05
  • 打赏
  • 举报
回复
不确定是什么,看哪个进程先执行就打印哪个进程的pid

69,373

社区成员

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

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