奇怪的execlp行为

时间:2014-06-03 19:22:09

标签: c++ c linux unix

我无法理解为什么在子函数之后打印父进程中的exec。

例如,请参阅此代码:

if(fork()) {
     // parent
     execlp("ls", "ls", "-l", 0);
     exit(0);
} else {
    // child
    printf("\nChild stuffs...\n");
}

输出:

Child stuffs
..................
... ls command ...

为什么在执行前打印“儿童东西”?我没有wait()或类似的东西,只是想不出来......

非常感谢每一个想法:)

1 个答案:

答案 0 :(得分:1)

无法保证操作系统调度程序将以何种顺序运行具有相同优先级的子进程和父进程。在您的情况下,可以怀疑子输出是先打印的,因为执行外部程序需要一些时间,而printf几乎立即执行(并刷新,如果行缓冲)。

如果将execlp移到孩子身上,我希望父母更有可能先显示输出。