当前位置: 技术问答>linux和unix
linux fork()函数的疑惑
来源: 互联网 发布时间:2017-02-15
本文导语: 在网上看了不少fork()函数的例子与解析等等,但是还是有点疑问, #include int main() { int pid; pid = fork(); if (pid == 0) { printf("a,parent pid is %dn",getpid()); } else if(pid >0) { pid = fork(); if (pid == 0) { p...
在网上看了不少fork()函数的例子与解析等等,但是还是有点疑问,
#include
int main()
{
int pid;
pid = fork();
if (pid == 0)
{
printf("a,parent pid is %dn",getpid());
}
else if(pid >0)
{
pid = fork();
if (pid == 0)
{
printf("c,child parent pid is %dn",getpid());
}
else if(pid > 0)
{
printf("b child child pid is %dn",getpid());
}
else
{
printf("errorn");
}
}
else
{
printf("errorn");
}
return 0;
}
以上代码也就是创建了两个子进程,总共3个进程,编译运行,就是为什么屏幕打印的顺序不一样,这是第一点。
第二点:假如只创建一个子进程的时候为什么输出顺序就一样呢,父进程-子进程。
#include
int main()
{
int pid;
pid = fork();
if (pid == 0)
{
printf("a,parent pid is %dn",getpid());
}
else if(pid >0)
{
pid = fork();
if (pid == 0)
{
printf("c,child parent pid is %dn",getpid());
}
else if(pid > 0)
{
printf("b child child pid is %dn",getpid());
}
else
{
printf("errorn");
}
}
else
{
printf("errorn");
}
return 0;
}
以上代码也就是创建了两个子进程,总共3个进程,编译运行,就是为什么屏幕打印的顺序不一样,这是第一点。
第二点:假如只创建一个子进程的时候为什么输出顺序就一样呢,父进程-子进程。
|
或者你可以在父进程调用sleep()让父进程先休息会,这样就可以先子进程执行了
|
这个执行顺序与进程调度有关系,即便是父子进程也不能保证谁先被调度,谁后调度。如果是你上面的代码,执行顺序是不确定的。
|
进程的调度与CPU有关,谁先谁后你是无法预知的!
如果想控制先后的话,可以使用sleep或者wait等函数
如果想控制先后的话,可以使用sleep或者wait等函数