Что происходит с дочерним процессом после вызова exec? - PullRequest
0 голосов
/ 24 апреля 2019

Я новичок в системном программировании и мне интересно, как работает функция 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 Ответ

2 голосов
/ 24 апреля 2019

Вы можете прочитать о execl в https://linux.die.net/man/3/execl

Семейство функций exec () заменяет текущий образ процесса новым образом процесса. Функции, описанные на этой странице руководства, являются внешними для execve (2). (См. Страницу руководства для execve (2) для получения дополнительной информации о замене текущего образа процесса.)

exec семейство ЗАМЕНЯЕТ текущий образ процесса новым образом процесса, поэтому после execl ничего не происходит.

...