首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

来看看这个fork的有关问题

2012-08-13 
来看看这个fork的问题#includestdio.hvoid main(){printf(my pid is %d.\n,getpid())fork()sleep(1)

来看看这个fork的问题
#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());
}
猜猜运行这个代码结果如何,为什么。楼主有点蒙了。

[解决办法]
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次,后面无序,进程的执行顺序由系统时间片随机决定,不知楼主能看明白不?

热点排行