Я знаю, что возможно считать вывод команд с каналом? Но что относительно того, чтобы получить возвращаемое значение? Например, я хочу выполниться:
execl("/bin/ping", "/bin/ping" , "-c", "1", "-t", "1", ip_addr, NULL);
Как я могу заставить возвращенное значение команды ping узнавать, возвратилось ли это 0 или 1?
Вот пример, который я написал давным-давно. По сути, после того, как вы разветвляете дочерний процесс и вы ждете
его статуса выхода, вы проверяете статус с помощью двух макросов. WIFEXITED
используется для проверки нормального завершения процесса, а WEXITSTATUS
проверяет, какой будет возвращенный номер в случае нормального возврата:
#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
int main()
{
int number, statval;
printf("%d: I'm the parent !\n", getpid());
if(fork() == 0)
{
number = 10;
printf("PID %d: exiting with number %d\n", getpid(), number);
exit(number) ;
}
else
{
printf("PID %d: waiting for child\n", getpid());
wait(&statval);
if(WIFEXITED(statval))
printf("Child's exit code %d\n", WEXITSTATUS(statval));
else
printf("Child did not terminate with exit\n");
}
return 0;
}
Вы можете использовать waitpid
, чтобы получить статус выхода вашего дочернего процесса как:
int childExitStatus;
waitpid( pID, &childExitStatus, 0); // where pID is the process ID of the child.
Вы можете дождаться дочернего процесса и узнать его статус выхода. Системный вызов - это ожидание (pid), попробуйте прочитать об этом.
Семейная функция exec не возвращает, возвращаемое значение int присутствует только в том случае, если во время запуска возникает ошибка (например, не удается найти файл для выполнения).
Перед вызовом exec необходимо получить возвращаемое значение из сигнала, отправленного процессу, который разветвляется.
вызовите wait () или waitpid () в вашем обработчике сигналов (ну, вы также можете вызвать wait () в своем процессе без использования какого-либо обработчика сигналов, если в нем больше ничего нет делать).