execl return - Ubuntu

时间:2014-09-01 02:12:24

标签: c ubuntu exec

我的问题是:在完成新过程映像的执行后,函数

  

EXECL()

会将执行返回给调用者进程还是父进程?

1 个答案:

答案 0 :(得分:2)

使用其中一个exec系列函数时,根本不希望该函数返回。程序计数器从替换调用进程的二进制映像的第一条指令开始。

来自Darwin手册页:

  

如果任何exec()函数返回,则会发生错误。   返回值为-1,全局变量errno将设置为   表明错误。

有评论询问以下内容,但已被删除:

如果您处于子进程中,并且execl成功,则子进程将被新二进制文件替换。如果失败,则控制返回到该子进程(调用者)。 forkexec之间没有严格的关系,如果这就是您要问的问题。如果您处于子进程中,并且exec失败,那么您有一个"分叉"子进程,它是原始父进程的副本。此时,您可能希望打印一些错误消息并退出子进程。

如果您想知道为什么失败,您可以使用以下模式:

if (execl(...)) {
    perror(NULL);
    exit(errno);
}

例如,尝试运行此程序,错误消息将指示如何修复程序:

#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main (const int argc, char * const argv[]) {
    if (execl("ls", "ls", "-la", NULL)) {
        perror(NULL);
        exit(errno);
    }

    return 0;
}

解决方案,在这种情况下使用execlp代替execl