Код возврата
Код возврата (англ. Exit status) программы, — это целочисленное значение, которое дочерний процесс возвращает родительскому процессу в момент завершения.
При выполнении компьютерных программ операционная система создаёт сущность, называемую процессом, с помощью которой она отслеживает и ведёт учёт выполнения программы. В многозадачных операционных системах, таких как Unix или Linux, новый процесс может быть порождён существующим процессом. Процесс-создатель называется «родительским», а создаваемый процесс — «дочерним». После создания дочерний процесс выполняется параллельно с родительским. Такая техника порождения дочерних процессов используется, чтобы передать часть работы дочернему процессу, в ситуациях, когда родительскому процессу не обязательно тратить на неё время. Когда дочерний процесс завершает своё выполнение, он автоматически либо явно по указанию программиста совершает системный вызов exit, передавая ему целое число. В результате вызова exit целое число передаётся родительскому процессу, который может получить его с помощью системного вызова wait.
Семантика
Родительский и дочерний процессы могут по-своему интерпретировать различные коды возврата. Например, существует общепринятая практика возвращать ноль в случае успешного выполнения дочернего процесса. Также родительский процесс может узнать причину аварийного завершения — например, прерывание работы из-за получения сигнала.
Точное множество возвращаемых кодов определяется каждой программой по-своему. Во многих системах чем больше значение целочисленного кода возврата, тем более серьёзной была причина ошибки. Другой часто используемый приём — передача набора флагов путём установки отдельных битов, как это делает утилита fsck.
Иногда, если коды возврата были выбраны с учётом такого варианта использования, код может применяться как номер ветви кода для дальнейшего выполнения в родительском процесса.
Shell и языки сценариев
Код возврата утилиты, вызванной и из командной строки, является результатом совершения системного вызова waitid или его эквивалента. Полный 32-битный код возврата доступен только через вызов waitid, а более старые интерфейсы возвращают число с обрезанным до одного байта значением.
С точки зрения командных оболочек, команда с нулевым кодом возврата завершилась успешно, а с ненулевым — неудачно. В результате возникает нелогичная ситуация, когда есть один стандартный способ сообщить об успешном завершении и большой выбор различных способов перечисления причин ошибки. Если команда завершилась после получения сигнала с номером N, командная оболочка присвоит переменной $? значение выше, чем 128. Большинство командных оболочек используют значение 128+N, но ksh93 использует 256+N.
Если команда не найдена, командная оболочка должна вернуть число 127. Если команда найдена, но не является исполняемой, то возвращается 126. Однако, не все командные оболочки соблюдают эти правила.
Если команда завершилась неудачно из-за ошибки в момент разворачивания выражений или перенаправления, код возврата будет больше нуля.
DOS
В терминологии DOS, errorlevel — это целочисленное выходное значение, возвращаемое исполняемой программой:
mov ah, 4Ch
mov al, xx
int 21h
где xx - код возврата в диапазоне от 00h до 0FFh