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

关于父子进程执行顺序的问题
刚刚学Linux下C程序开发,看的是清华大学出版社出版的《Linxu C 程序基础与实例讲解》,我现在对父子进程的执行顺序感到很困惑。书上的例子是先子进程后父进程。但在我的电脑上(Ubuntu 10.10)却是先父进程后子进程。
网上说,这是内核进程调度问题,请问一下这是怎么搞得,这样的程序是无法跨平台使用的吧?
附书上的例子:
C/C++ code

//fork()
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
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 .




------解决方案--------------------
fork后,是不确定先执行哪个的,哪个都有可能先执行。
------解决方案--------------------
fork就是这样的,父子进程的执行顺序不确定,谁先执行都有可能。
如果需要确定的执行顺序,就得想别的办法。
比如用vfork,保证子进程先运行。
------解决方案--------------------
探讨
引用:

fork后,是不确定先执行哪个的,哪个都有可能先执行。

那想确定执行顺序怎么办?用只能用vfork吗?

------解决方案--------------------
父子进程的执行顺序是不确定的,不要依赖这种顺序
如果实在需要顺序,可以考虑某种进程间通信机制,如管道、信号灯..