首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

linux fork()函数的疑惑解决思路

2012-04-14 
linux fork()函数的疑惑在网上看了不少fork()函数的例子与解析等等,但是还是有点疑问,#include stdio.hi

linux fork()函数的疑惑
在网上看了不少fork()函数的例子与解析等等,但是还是有点疑问,
#include <stdio.h>

int main()
{
int pid;

pid = fork();

if (pid == 0)
{
printf("a,parent pid is %d\n",getpid());
}
else if(pid >0)
{
pid = fork();

if (pid == 0)
{
printf("c,child parent pid is %d\n",getpid());
}
else if(pid > 0)
{
printf("b child child pid is %d\n",getpid());
}
else
{
printf("error\n");
}
}
else
{
printf("error\n");
}

return 0;
}
以上代码也就是创建了两个子进程,总共3个进程,编译运行,就是为什么屏幕打印的顺序不一样,这是第一点。
第二点:假如只创建一个子进程的时候为什么输出顺序就一样呢,父进程-子进程。

[解决办法]
这个执行顺序与进程调度有关系,即便是父子进程也不能保证谁先被调度,谁后调度。如果是你上面的代码,执行顺序是不确定的。
[解决办法]
或者你可以在父进程调用sleep()让父进程先休息会,这样就可以先子进程执行了
[解决办法]
进程的调度与CPU有关,谁先谁后你是无法预知的!
如果想控制先后的话,可以使用sleep或者wait等函数

热点排行