Код выхода, возвращаемый эхо, отличается от кода выхода программы.Зачем? - PullRequest
0 голосов
/ 26 мая 2019

Я написал программу, которая возвращает код ошибки, используя процессы.Результатом работы программы, если на входе в нее предоставляют команду false, является 255. Однако команда false;echo $?возвращает 1 Почему это происходит?Solaris, unix

Я нашел файл false.c в исходном коде, он возвращает 255 (не уверен, что это правильная команда) https://github.com/illumos/illumos-gate/blob/master/usr/src/cmd/false/false.c

#include <sys/types.h>
#include <stdio.h>
#include <unistd.h>
#include <wait.h>

main(int argc, char *argv[])
{
        int status;
        pid_t pid = fork();
        if (pid == -1){
                perror("fork error");
                exit(-1);
        }
        if (pid == 0) {
                execvp(argv[1], &argv[1]);
                perror(argv[1]);
                exit(-5);
        }
        if( wait(&status) == -1){
                perror("wait");
                exit(-1);
        }
        if(WIFEXITED(status))
                printf("exit status: %d\n",WEXITSTATUS(status));

        exit(0);
}

1 Ответ

0 голосов
/ 29 мая 2019

Коды выхода UNIX (Linux, Solaris, BSD и т. Д.) Могут быть только от 0 до 255, где 0 - это хорошо, а не ноль - ошибка.Коды выхода не подписаны, поэтому -1 можно преобразовать в другое (ненулевое) значение, как и значения более 255.

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