Статус выхода - Exit status

В статус выхода из процесс в компьютерное программирование небольшое число, переданное из дочерний процесс (или вызываемого) к родительский процесс (или вызывающий), когда он завершил выполнение определенной процедуры или делегированной задачи. В ДОС, это можно назвать уровень ошибки.

Когда компьютерные программы выполняются, Операционная система создает абстрактная сущность называется процесс в котором ведется бухгалтерский учет по этой программе. В многозадачных операционных системах, таких как Unix или же Linux, новые процессы могут быть созданы активными процессами. Процесс, порождающий другой, называется родительский процесс, а созданные дочерние процессы. Дочерние процессы выполняются одновременно с родительским процессом. Техника порождения дочерних процессов используется для делегирования некоторой работы дочернему процессу, когда нет причин останавливать выполнение родительского процесса. Когда ребенок заканчивает выполнение, он выходит, вызывая выход системный вызов. Этот системный вызов облегчает передачу кода статуса выхода обратно родительскому элементу, который может получить это значение с помощью ждать системный вызов.

Семантика

Родитель и ребенок могут понимать значение статусов выхода. Например, это обычная практика программирования, когда дочерний процесс возвращает (выходит с) ноль родительскому процессу, что означает успех. Помимо этого значения, возвращаемого дочерним элементом, другая информация, например, как процесс завершился, как обычно, так и с помощью сигнал также может быть доступен родительскому процессу.

Конкретный набор возвращаемых кодов уникален для программы, которая его устанавливает. Обычно это указывает на успех или неудачу. Значение кода, возвращаемого функцией или программой, может указывать на конкретную причину сбоя. Во многих системах чем выше значение, тем серьезнее причина ошибки.[1] В качестве альтернативы каждый бит может указывать на разные условия, которые затем оценивается или же оператор вместе, чтобы дать окончательное значение; Например, fsck Является ли это.

Иногда, если коды разработаны с учетом этой цели, их можно использовать непосредственно в качестве индекса ветвления после возврата к исходной программе, чтобы избежать дополнительных тестов.

AmigaOS

В AmigaOS, MorphOS и AROS, определены четыре уровня:

  • ОК 0
  • ПРЕДУПРЕЖДЕНИЕ 5
  • ОШИБКА 10
  • ОТКАЗ 20

Оболочка и скрипты

Скрипты оболочки обычно выполняют команды и фиксируют их статусы выхода.

Для целей оболочки успешно завершилась команда, которая завершается с нулевым статусом выхода. Ненулевой статус выхода указывает на сбой. Эта, казалось бы, нелогичная схема используется, поэтому существует один четко определенный способ обозначить успех и множество способов обозначить различные режимы отказа. Когда команда завершается сигналом с номером N, оболочка устанавливает переменную $? до значения больше 128. Большинство оболочек используют 128 + N, а ksh93 использует 256 + N.

Если команда не найдена, оболочка должна вернуть статус 127. Если команда найдена, но не выполняется, статус возврата должен быть 126.[2] Обратите внимание, что это относится не ко всем оболочкам.

Если команда не выполняется из-за ошибки во время расширения или перенаправления, статус выхода больше нуля.

Язык C

В C язык программирования позволяет программам выходить или возвращаться из основная функция чтобы сигнализировать об успехе или неудаче, возвращая целое число или возвращая макросы EXIT_SUCCESS и EXIT_FAILURE. В Unix-подобных системах они равны 0 и 1 соответственно.[3] Программа на C может также использовать выход() функция, указывающая целочисленный статус или макрос выхода в качестве первого параметра.

Возвращаемое значение из главный передается в выход функция, которая при нулевых значениях EXIT_SUCCESS или же EXIT_FAILURE может перевести его в «форму, определяемую реализацией» успешное прекращение или же неудачное прекращение.

Кроме нуля и макросов EXIT_SUCCESS и EXIT_FAILURE, стандарт C не определяет значения кодов возврата. Правила использования кодов возврата различаются на разных платформах (см. Разделы, посвященные конкретным платформам).

ДОС

В терминологии DOS уровень ошибки является целое число выход код вернулся исполняемая программа или же подпрограмма. Уровни ошибок обычно находятся в диапазоне от 0 до 255. В ДОС доступно только 256 кодов ошибок.

Статусы выхода часто фиксируются пакетные программы.

Ява

В Java любой метод может вызывать System.exit (статус int), если только менеджер безопасности не разрешает это. Это завершит работу текущей виртуальной машины Java. «Аргумент служит кодом состояния; по соглашению ненулевой код состояния указывает на ненормальное завершение».[4]

OpenVMS

В OpenVMS, успех обозначается нечетными значениями, а неудача - четными. Значение представляет собой 32-битное целое число с подполями: биты управления, номер средства, номер сообщения и серьезность. Значения серьезности делятся на успех (успех, информационный) и неудачный (предупреждение, ошибка, фатальный).[5]

POSIX

В Unix и другие POSIX-совместимые системы, родительский процесс может получить статус выхода дочернего процесса, используя ждать() семейство системных вызовов, определенных в подождите.h.[6] Из них waitid () [7] call получает полный 32-битный статус выхода, но более старый ждать() и waitpid () [8] вызовы извлекают только 8 младших битов статуса выхода.

В ждать() и waitpid () интерфейсы устанавливают положение дел значение типа int упакован как битовое поле с различными типами информации об окончании дочернего процесса. Если ребенок прекратил свое существование путем выхода (как определено WIFEXITED () макрос; обычной альтернативой было то, что он умер от непойманного сигнал ), SUS указывает, что 8 младших битов статуса выхода могут быть извлечены из значения статуса с помощью WEXITSTATUS () макрос.

в waitid () системный вызов (добавлен с помощью SUSv1), дочерний статус выхода и другая информация больше не в битовом поле, а в структуре типа siginfo_t.[9]

POSIX-совместимые системы обычно используют ноль для успеха и ненулевое значение для ошибки.[10] Некоторые соглашения были разработаны относительно относительного значения различных кодов ошибок; например, GNU рекомендует зарезервировать коды с установленным старшим битом для серьезных ошибок,[3].

ОС, производные от BSD, определили обширный набор предпочтительных интерпретаций: значения для 15 кодов состояния с 64 по 78 определены в sysexits.h. [11] Исторически они происходят из Отправить письмо и другие агенты передачи сообщений, но с тех пор они нашли применение во многих других программах.[12]

По причинам переносимости в glibc определены макросы EXIT_SUCCESS и EXIT_FAILURE. В Advanced Bash-Scripting Guide и /usr/include/sysexits.h есть некоторая информация о значении кодов статуса выхода, отличных от 0.[13]

Windows

Windows использует 32-битные целые числа без знака в качестве кодов выхода,[14] хотя интерпретатор команд обрабатывает их как подписанные.[15] Если процесс не инициализируется, может быть возвращен код системной ошибки Windows.[16][17]

На коды выхода напрямую ссылается, например, интерпретатор командной строки. CMD.exe в уровень ошибки терминология, унаследованная от ДОС. .NET Framework процессы и Windows PowerShell называйте это ExitCode собственность Процесс объект.

Смотрите также

Рекомендации

  1. ^ «Уровни ошибок». Страницы сценариев Роба ван дер Вуда. Получено 2007-08-26.
  2. ^ «Командный язык оболочки - статус выхода для команд». Открытая группа. Получено 7 июля 2015.
  3. ^ а б "Справочное руководство библиотеки GNU C 25.6.2: Статус выхода". Gnu.org. Получено 2012-07-09.
  4. ^ «Java 1.6.0 API». солнце. Получено 2008-05-06.
  5. ^ «Формат OpenVMS для значений статуса возврата». H71000.www7.hp.com. Архивировано из оригинал на 2012-03-19. Получено 2012-07-09.
  6. ^ sys_wait.h - Справочник по базовым определениям, Единая спецификация UNIX, Выпуск 7 из Открытая группа
  7. ^ waitid - Справочник по системным интерфейсам, Единая спецификация UNIX, Выпуск 7 из Открытая группа
  8. ^ ждать - Справочник по системным интерфейсам, Единая спецификация UNIX, Выпуск 7 из Открытая группа
  9. ^ «2.4.3 Сигнальные действия». Открытая группа. Получено 2019-02-08.
  10. ^ «Глава 6. Выход и статус выхода». Faqs.org. Получено 2012-07-09.
  11. ^ сисекситы (3): предпочтительные коды выхода для программ -FreeBSD Библиотечные функции Руководство
  12. ^ Поиск в Google по запросу «sysexits.h» site: github.com сообщает «Около 3 540 результатов»; получено 21 фев 2013 в 01:30 UTC
  13. ^ http://tldp.org/LDP/abs/html/exitcodes.html
  14. ^ «Функция ExitProcess». Получено 2016-12-16.
  15. ^ "ExitCodes больше 255, возможно?". Получено 2009-09-28.
  16. ^ «Коды системных ошибок Windows (коды выхода)». Получено 2009-09-28.
  17. ^ «Коды системных ошибок статьи MSDN». Microsoft.