2016-09-17 2 views
1

При использовании excevp, как я могу различать случаи, когда выполнение команды завершается с ошибкой и когда выполнение команды заканчивается кодом нулевого выхода?Как различать случаи выполнения при использовании execvp?

+1

Вы прочитали man-страницу? – Olaf

+0

"* когда выполнение команды заканчивается кодом нулевого выхода *, тогда команда получила * exec * uted. Поэтому 'execvp()' преуспел. Если 'execvp()' преуспел, он не возвращается. Затем родительу нужно вызвать 'wait()' или 'waitpid()' для сбора кода возврата процесса. – alk

ответ

0

Распространено _exit(127) если Exec терпит неудачу и затем родитель интерпретировать этот код выхода как Exec не в состоянии (раковины, system и posix_spawn все это сделать - что фактически означает, что они не могут сказать, если ребенок сделал Exec и возвращается 127 или если exec не удалось).

Если вы хотите создать супер надежное решение, вы можете создать перед тем, как нарисовать трубку с номером O_CLOEXEC, а затем выполнить дочерний процесс, отправив execv-elicited errno через этот канал родительскому.

2

Если выполнение команды завершается с ошибкой (т. Е. Не запускается) execvp будет возвращать -1, а errno будет содержать соответствующий код ошибки.

Если команда выполнена успешно, execvp не возвращается. Родительский процесс того, который вызвал execvp, может вызвать wait, чтобы получить возвращаемое значение команды, независимо от того, равен ли он нулю или не равен нулю.

Смежные вопросы