Выходные коды больше 255, возможно?
Если да, то на какой операционной системе, оболочке или как?
Рассмотрим следующую 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 ответа
Не возможно на 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. (Я уверен, что вы часто видели некоторые из них на собственном экране).
Сейчас начнется: