Как добраться, возвращаемое значение программы работало через вызов члена семейства должностных лиц функций?

Я знаю, что возможно считать вывод команд с каналом? Но что относительно того, чтобы получить возвращаемое значение? Например, я хочу выполниться:

execl("/bin/ping", "/bin/ping" , "-c", "1", "-t", "1", ip_addr, NULL);

Как я могу заставить возвращенное значение команды ping узнавать, возвратилось ли это 0 или 1?

13
задан alk 3 August 2014 в 12:56
поделиться

4 ответа

Вот пример, который я написал давным-давно. По сути, после того, как вы разветвляете дочерний процесс и вы ждете его статуса выхода, вы проверяете статус с помощью двух макросов. 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;
}
13
ответ дан 1 December 2019 в 21:37
поделиться

Вы можете использовать waitpid , чтобы получить статус выхода вашего дочернего процесса как:

int childExitStatus;
waitpid( pID, &childExitStatus, 0); // where pID is the process ID of the child.
5
ответ дан 1 December 2019 в 21:37
поделиться

Вы можете дождаться дочернего процесса и узнать его статус выхода. Системный вызов - это ожидание (pid), попробуйте прочитать об этом.

0
ответ дан 1 December 2019 в 21:37
поделиться

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

Перед вызовом exec необходимо получить возвращаемое значение из сигнала, отправленного процессу, который разветвляется.

вызовите wait () или waitpid () в вашем обработчике сигналов (ну, вы также можете вызвать wait () в своем процессе без использования какого-либо обработчика сигналов, если в нем больше ничего нет делать).

4
ответ дан 1 December 2019 в 21:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: