读书人

来看看这个fork的有关问题

发布时间: 2012-08-13 13:21:53 作者: rapoo

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

读书人网 >C语言

热点推荐