Выходные коды больше 255, возможно? - PullRequest
31 голосов
/ 07 октября 2008

Если да, в какой операционной системе, оболочке или где-либо еще?

Рассмотрим следующую Java-программу (в качестве примера я использую java, для этого вопроса подойдет любой язык, который больше относится к операционным системам):

public class ExitCode {
    public static void main(String args[]) {
        System.exit(Integer.parseInt(args[0]));
    }
}

При запуске в Linux и bash он всегда возвращает значения менее равные 255, например (echo $? печатает код выхода предыдущей выполненной команды)

> java ExitCode 2; echo $?
2

> java ExitCode 128; echo $?
128

> java ExitCode 255; echo $?
255

> java ExitCode 256; echo $?
0

> java ExitCode 65536; echo $?
0

РЕДАКТИРОВАНИЕ: (пока что) ответ ниже полностью объясняет, что происходит в UNIX. Я все еще задаюсь вопросом о других ОС.

Ответы [ 3 ]

33 голосов
/ 07 октября 2008

Невозможно для Unix и производных. Возвращаемая информация о состоянии выхода состоит из двух 8-битных полей, одно из которых содержит состояние выхода, а другое содержит информацию о причине смерти (0 означает упорядоченный выход под управлением программы, другие значения указывают, что сигнал убил его, и указывают, ядро было сброшено).

13 голосов
/ 30 ноября 2008

В современной Windows, сама ОС и консольная оболочка по умолчанию (CMD.EXE) принимают и показывают коды выхода по крайней мере во всем диапазоне 32-разрядных целых чисел со знаком. Выполнение приведенного выше примера в CMD.EXE дает запрашиваемые коды выхода:

> java ExitCode 2
> echo %errorlevel%
2

> java ExitCode 128
> echo %errorlevel%
128

> java ExitCode 255
> echo %errorlevel%
255

> java ExitCode 256
> echo %errorlevel%
256

> java ExitCode 65536
> echo %errorlevel%
65536

Windows на самом деле не имеет понятия о сигналах Unix, и при этом она не пытается перехватить код выхода, чтобы добавить дополнительную информацию, до тех пор, пока ваша оболочка (или любая другая программа заканчивает чтение кода выхода) не делает что либо вы должны вернуть коды возврата, которые вы вернули. К счастью, программы, использующие среду выполнения Microsoft C (включая все программы, скомпилированные с MS Visual C ++), сохраняют код завершения, как и при выходе из процессов.

0 голосов
/ 15 октября 2008

В Windows гораздо больше кодов выхода, более 14 000. (Я уверен, что вы часто видели некоторые из них на собственном экране).

Вот идет:

...