当前位置: 技术问答>linux和unix
关于父子进程执行顺序的问题
来源: 互联网 发布时间:2017-02-18
本文导语: 刚刚学Linux下C程序开发,看的是清华大学出版社出版的《Linxu C 程序基础与实例讲解》,我现在对父子进程的执行顺序感到很困惑。书上的例子是先子进程后父进程。但在我的电脑上(Ubuntu 10.10)却是先父进程后子...
刚刚学Linux下C程序开发,看的是清华大学出版社出版的《Linxu C 程序基础与实例讲解》,我现在对父子进程的执行顺序感到很困惑。书上的例子是先子进程后父进程。但在我的电脑上(Ubuntu 10.10)却是先父进程后子进程。
网上说,这是内核进程调度问题,请问一下这是怎么搞得,这样的程序是无法跨平台使用的吧?
附书上的例子:
运行结果:
Parent process with ID : 30394 ,Child process ID : 30395 .
Child process with ID : 30395 .
网上说,这是内核进程调度问题,请问一下这是怎么搞得,这样的程序是无法跨平台使用的吧?
附书上的例子:
//fork()
#include
#include
#include
int main()
{
pid_t child_pid;
child_pid=fork();
switch(child_pid)
{
case -1:
printf("Create process failed!n");
break;
case 0:
printf("Child process with ID : %d .n",(int)getpid());
break;
default:
printf("Parent process with ID : %d ,Child process ID : %d .n",(int)getpid(),(int)child_pid);
break;
}
return 0;
}
运行结果:
Parent process with ID : 30394 ,Child process ID : 30395 .
Child process with ID : 30395 .
|
父子进程哪个先运行时看内核的调度算法,在我们使用者看来,就是不确定的,LZ不要纠结了。switch 语句相当于并发处理,各个case之间一起运行的,父子进程之间谁运行时不可知的。1楼那个程序最后一个else里如果没有sleep和wait,谁先运行也是不可知的。
如果你很想控制他们谁先运行,可以使用sleep,先让一个睡一会嘛,只要sleep了,就肯定后运行。或者父进程中使用wait,等待子进程,那么很显然就是子进程在运行。
vfork的使用好像并不能控制运行顺序。
建议LZ去看《unix坏境高级编程》,好好体会那里面的代码,会大有收获的
如果你很想控制他们谁先运行,可以使用sleep,先让一个睡一会嘛,只要sleep了,就肯定后运行。或者父进程中使用wait,等待子进程,那么很显然就是子进程在运行。
vfork的使用好像并不能控制运行顺序。
建议LZ去看《unix坏境高级编程》,好好体会那里面的代码,会大有收获的
|
父子进程的执行顺序是不确定的,不要依赖这种顺序
如果实在需要顺序,可以考虑某种进程间通信机制,如管道、信号灯..
如果实在需要顺序,可以考虑某种进程间通信机制,如管道、信号灯..
|
fork后,是不确定先执行哪个的,哪个都有可能先执行。
|
fork就是这样的,父子进程的执行顺序不确定,谁先执行都有可能。
如果需要确定的执行顺序,就得想别的办法。
比如用vfork,保证子进程先运行。
如果需要确定的执行顺序,就得想别的办法。
比如用vfork,保证子进程先运行。