调用exec后,子进程会怎样?

时间:2019-04-24 10:43:12

标签: c fork exec

我是系统编程的新手,很好奇exec函数的工作方式。我的第一个问题是,为什么孩子在打电话给exec之后从不打印“我是孩子”。 exec如何替换子进程?我的第二个问题是,为什么程序(在调用exec之后)继续运行,并在完全终止之前要求另外一个命令行参数。我不确定这是怎么回事。任何人都可以解释发生了什么将不胜感激。这是代码:

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

int main(void) {

    if(fork() == 0){
        printf("Hello from child!\n");
        execl("/usr/bin/sort", "sort", "talk.c",NULL);
        printf("I'm the child\n");
    }
    else{
        printf("Hello from parent!\n");
        printf("Iam the parent\n");
    }
    return 0;
}

1 个答案:

答案 0 :(得分:2)

您可以在https://linux.die.net/man/3/execl中阅读有关execl的信息

  

exec()系列函数将当前过程映像替换为新的过程映像。本手册页中描述的功能是execve(2)的前端。 (有关替换当前过程映像的更多详细信息,请参见execve(2)的手册页。)

exec系列用新的过程映像替换当前过程映像,因此execl之后什么也没有发生。