Вопрос

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

Рассмотрим следующую программу 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.Я все еще сомневаюсь в других операционных системах.

Это было полезно?

Решение

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

Другие советы

В современной 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 ++), сохраняют код завершения, как и при выходе из процессов.

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

А вот и он:

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top