stringtranslate.com

Статус выхода

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

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

Семантика

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

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

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

АмигаОС

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

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

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

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

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

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

язык Си

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

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

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

ДОС

В терминологии DOS уровень ошибки — это целочисленный код завершения , возвращаемый исполняемой программой или подпрограммой . Уровни ошибок обычно варьируются от 0 до 255. [4] [5] [6] [7] В DOS доступно только 256 кодов ошибок, но DR DOS 6.0 и выше поддерживают 16-битные коды ошибок, по крайней мере, в CONFIG.SYS . [6] В 4DOS и DR-DOS COMMAND.COM коды завершения (в пакетных заданиях) могут быть установлены с помощью EXIT n [6] и (в CONFIG.SYS) с помощью ERROR= n . [6]

Статусы выхода часто фиксируются пакетными программами с помощью команд IF ERRORLEVEL . [4] [6] Многопользовательский DOS поддерживает зарезервированную переменную среды %ERRORLVL% , которая автоматически обновляется при выходе из приложений. COMMAND.COM в DR-DOS 7.02 и выше поддерживает аналогичную переменную псевдосреды %ERRORLLVL%, а также %ERRORLEVEL% . В CONFIG.SYS DR DOS 6.0 и выше поддерживает ONERROR для проверки состояния загрузки и кода возврата драйверов устройств, а также кода завершения программ. [6]

Джава

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

OpenVMS

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

План 9

В языке C Plan 9 статус выхода обозначается строкой, передаваемой функции выходов , а функция main имеет тип void .

ПОСИКС

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

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

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

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

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

Расширенное руководство по написанию сценариев Bash и /usr/include/sysexits.h содержат некоторую информацию о значении кодов состояния выхода, отличных от 0. [17]

Окна

Microsoft Windows использует 32-битные целые числа без знака в качестве кодов выхода, [18] [19] , хотя интерпретатор команд обрабатывает их как знаковые. [20]

На коды выхода напрямую ссылаются, например, интерпретатор командной строки CMD.exe в errorlevelтерминологии, унаследованной от DOS . Процессы .NET Framework и Windows PowerShell ссылаются на него как на ExitCodeсвойство объекта Process.

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

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

  1. ^ «Уровни ошибок». Страницы сценариев Роба ван дер Вуда . Проверено 26 августа 2007 г.
  2. ^ «Командный язык оболочки — статус выхода для команд» . Открытая группа . Проверено 7 июля 2015 г.
  3. ^ ab «Справочное руководство библиотеки GNU C 25.6.2: Статус выхода». Gnu.org . Проверено 9 июля 2012 г.
  4. ^ аб Пол, Матиас Р. (1 мая 1997 г.) [01 октября 1993 г.]. BATTIPs — Советы и рекомендации по программированию пакетных заданий (на немецком языке). 7: УРОВЕНЬ ОШИБКИ. Архивировано из оригинала 23 августа 2017 г. Проверено 23 августа 2017 г. {{cite book}}: |work=игнорируется ( помощь ) [1] [2] Архивировано 11 сентября 2017 г. по адресу archive.today (Примечание. BATTIPS.TXT является частью MPDOSTIP.ZIP. Предоставленная ссылка указывает на более старую версию BATTIPS.TXT, преобразованную в HTML. файл.) [3]
  5. ^ Ауэр, Эрик; Пол, Матиас Р.; Холл, Джим (24 декабря 2015 г.) [31 декабря 2003 г.]. «Уровни ошибок MS-DOS». Архивировано из оригинала 24 декабря 2015 г.
  6. ^ abcdef Пол, Матиас Р. (30 июля 1997 г.) [1 мая 1994 г.]. NWDOS-TIPs — советы и подсказки для Novell DOS 7, с просмотром недокументированных подробностей, ошибок и обходных путей. Выпуск 157 (на немецком языке) (3-е изд.). Архивировано из оригинала 4 ноября 2016 г. Проверено 6 августа 2014 г. {{cite book}}: |work=игнорируется ( помощь ) (Примечание. NWDOSTIP.TXT — это комплексная работа по Novell DOS 7 и OpenDOS 7.01 , включая описание многих недокументированных функций и внутренних устройств. Предоставленная ссылка указывает на преобразованную в HTML версию файла, которая является частью коллекции MPDOSTIP.ZIP.) [4]
  7. ^ Аллен, Уильям; Аллен, Линда. «Windows 95/98/ME ОШИБКИ». Архивировано из оригинала 7 июля 2011 г.
  8. ^ «API Java 1.6.0» . Сан Микросистемс . Проверено 6 мая 2008 г.
  9. ^ «Формат OpenVMS значений возвращаемого статуса» . H71000.www7.hp.com. Архивировано из оригинала 19 марта 2012 г. Проверено 9 июля 2012 г.
  10. ^ sys_wait.h  - Справочник базовых определений, Единая спецификация UNIX , версия 4 от Open Group.
  11. ^ waitid  - Справочник по системным интерфейсам, Единая спецификация UNIX , версия 4 от Открытой группы.
  12. ^ wait  - Справочник по системным интерфейсам, Единая спецификация UNIX , версия 4 от Открытой группы.
  13. ^ «2.4.3 Действия по сигналу» . Открытая группа . Проверено 8 февраля 2019 г.
  14. ^ «Глава 6. Выход и статус выхода» . Faqs.org . Проверено 9 июля 2012 г.
  15. ^ sysexits(3) : предпочтительные коды завершения программ –  Руководство по функциям библиотеки FreeBSD
  16. ^ Поиск Google по запросу «сайт sysexits.h»:github.com» сообщает «Около 3540 результатов»; получено 21 февраля 2013 г.
  17. ^ «Коды выхода со специальным значением».
  18. ^ «Функция ExitProcess» . Проверено 16 декабря 2016 г.
  19. ^ «Функция GetExitCodeProcess» . Проверено 22 апреля 2022 г.
  20. ^ "Возможны ли коды выхода больше 255?" . Проверено 28 сентября 2009 г.