奇怪的execlp行为

Strange execlp behavior

本文关键字:行为 execlp      更新时间:2023-10-16

我不明白为什么父进程中的exec在子函数之后打印。

例如,参见以下代码:

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

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

为什么在执行命令之前打印"Child stuff"?我没有wait()或类似的东西,只是想不出来…

每一个想法都非常感谢:)

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

如果您将execlp移动到子节点,我希望父节点更有可能首先显示输出