日期:2014-05-16  浏览次数:20684 次

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等函数