Вам нужно использовать waitpid(3)
или wait(1)
в родительском коде, чтобы дождаться выхода ребенка и получить сообщение об ошибке.
Синтаксис:
pid_t waitpid(pid_t pid, int *status, int options);
или
pid_t wait(int *status);
status
содержит статус выхода. Посмотрите на справочные страницы , чтобы узнать, как его разобрать.
Обратите внимание, что вы не можете сделать это из дочернего процесса. После вызова execvp
дочерний процесс умирает (для всех практических целей) и заменяется на exec
d процесс. Единственный способ достичь exit(0)
- это если сам по себе execvp
потерпит неудачу, но тогда причина не в том, что новая программа закончилась. Это потому, что он никогда не запускался с самого начала.
Редактировать: дочерний процесс не действительно не умирает. PID и среда остаются неизменными, но весь код и данные заменяются процессом exec
. Вы можете рассчитывать на , а не , возвращаясь к исходному дочернему процессу, если только exec
завершится неудачей.