форк и execlp - PullRequest
       6

форк и execlp

0 голосов
/ 02 октября 2011

Когда я использую fork для создания нового дочернего процесса, а затем вызываю execlp syscall для запуска новой программы в дочернем процессе. Идентификаторы процесса, которые я получаю в дочернем процессе после execlp и я получаю из системного вызова waitpid после завершения дочернего процесса, отличаются.

Например, getpid () возвращает 7103 в дочернем элементе, а waitpid возвращает 7101 в родительском.

Полагаю, что-то происходит после запуска execlp. Может кто-нибудь объяснить это. Спасибо.

Кстати, я запускаю свой код на Fedora.

Вот код:

/ * родитель программы * /

if ((pid = fork()) < 0){
    perror("fork failed");
    exit(2);
}

if (pid == 0){
    // child
    execlp("xterm", "xterm", "-e", "./echo_cli", "127.0.0.1", (char *)0);
    exit(0);
}
/* ... */
// sig_chld handles SIGCHLD singal
void sig_chld(int signo){
    pid_t pid;
    int stat;

    while ((pid = waitpid(-1, &stat, WNOHANG)) > 0){ 
        printf("Child %d terminated\n", pid);
    }   
    return ;
}

/ * программа echo_cli * /

pid = getpid();

1 Ответ

4 голосов
/ 02 октября 2011

Вы выполняете xterm, а не echo_cli. Ребенок вашего ребенка, конечно, сообщит другой PID.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...