Статус выхода
В вычислениях статус завершения или код завершения завершенного процесса представляет собой целое число, которое становится доступным его родительскому процессу (или вызывающему объекту). В DOS это можно назвать уровнем ошибок .
Когда компьютерные программы выполняются, операционная система создает абстрактную сущность , называемую процессом , в котором ведется учет этой программы. В многозадачных операционных системах, таких как Unix или Linux , новые процессы могут создаваться активными процессами. Процесс, порождающий другой, называется родительским процессом , а созданные — дочерними процессами . Дочерние процессы выполняются одновременно с родительским процессом. Техника создания дочерних процессов используется для делегирования некоторой работы дочернему процессу, когда нет причин останавливать выполнение родительского процесса. Когда дочерний процесс завершает выполнение, он завершает работу, вызывая выхода системный вызов . Этот системный вызов облегчает передачу кода состояния выхода обратно родительскому элементу, который может получить это значение с помощью системного вызова ожидания .
Семантика
[ редактировать ]Родитель и ребенок могут понять значение статусов выхода. Например, обычной практикой программирования является то, что дочерний процесс возвращает родительскому процессу ноль (завершается с ним), что означает успех. Помимо этого возвращаемого значения дочернего процесса, другая информация, например, о том, как процесс завершился, обычно или по сигналу родительскому процессу также может быть доступна .
Конкретный возвращаемый набор кодов уникален для программы, которая его устанавливает. Обычно это указывает на успех или неудачу. Значение кода, возвращаемого функцией или программой, может указывать на конкретную причину сбоя. Во многих системах, чем выше значение, тем серьезнее причина ошибки. [1] Альтернативно, каждый бит может обозначать различные условия, при этом они оцениваются оператором или вместе для получения окончательного значения; например, это делает fsck .
Иногда, если коды разработаны с этой целью, их можно использовать непосредственно в качестве индекса ветвления при возврате к инициирующей программе, чтобы избежать дополнительных тестов.
АмигаОС
[ редактировать ]В AmigaOS , MorphOS и AROS определены четыре уровня:
- ОК 0
- ПРЕДУПРЕЖДЕНИЕ 5
- ОШИБКА 10
- ДЕФЕКТ 20
Оболочка и скрипты
[ редактировать ]Сценарии оболочки обычно выполняют команды и фиксируют их статусы завершения.
Для целей оболочки команда, которая завершается с нулевым статусом завершения, завершилась успешно. Ненулевой статус выхода указывает на сбой. Эта, казалось бы, нелогичная схема используется, поэтому существует один четко определенный способ указать на успех и множество способов указать на различные виды неудач. Когда команда завершается сигналом с номером 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 поддерживает зарезервированную переменную среды %ERRORLLVL% , которая автоматически обновляется при выходе из приложений. 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 бит статуса выхода.
The 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
объект.
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ «Уровни ошибок» . Страницы сценариев Роба ван дер Вуда . Проверено 26 августа 2007 г.
- ^ «Командный язык оболочки — статус выхода для команд» . Открытая группа . Проверено 7 июля 2015 г.
- ^ Jump up to: а б «Справочное руководство библиотеки GNU C 25.6.2: Статус выхода» . Gnu.org . Проверено 9 июля 2012 г.
- ^ Jump up to: а б Пол, Матиас Р. (1 мая 1997 г.) [1 октября 1993 г.]. BATTIPs — советы и подсказки по программированию пакетных заданий (на немецком языке). 7: Запрос ОШИБКИ. Архивировано из оригинала 23 августа 2017 г. Проверено 23 августа 2017 г.
{{cite book}}
:|work=
игнорируется ( помощь ) [1] [2] Архивировано 11 сентября 2017 г. по адресу archive.today (Примечание. BATTIPS.TXT является частью MPDOSTIP.ZIP. Предоставленная ссылка указывает на преобразованную в HTML более старую версию файла BATTIPS.TXT. .) [3] - ^ Ауэр, Эрик; Пол, Матиас Р.; Холл, Джим (24 декабря 2015 г.) [31 декабря 2003 г.]. «Уровни ошибок MS-DOS» . Архивировано из оригинала 24 декабря 2015 г.
- ^ Jump up to: а б с д и ж Пол, Матиас Р. (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] - ^ Аллен, Уильям; Аллен, Линда. «УРОВНИ ОШИБОК Windows 95/98/ME» . Архивировано из оригинала 7 июля 2011 г.
- ^ «Java 1.6.0 API» . Сан Микросистемс . Проверено 6 мая 2008 г.
- ^ «Формат OpenVMS возвращаемых значений статуса» . H71000.www7.hp.com. Архивировано из оригинала 19 марта 2012 г. Проверено 9 июля 2012 г.
- ^ Единая спецификация UNIX , версия 4 от Open Group. – Справочник базовых определений,
- ^ Единая спецификация UNIX , версия 4 от Открытой группы. – Справочник по системным интерфейсам,
- ^ Единая спецификация UNIX , версия 4 от Открытой группы. – Справочник по системным интерфейсам,
- ^ «2.4.3 Действия по сигналу» . Открытая группа . Проверено 8 февраля 2019 г.
- ^ «Глава 6. Выход и статус выхода» . Faqs.org . Проверено 9 июля 2012 г.
- ^ FreeBSD функциям библиотеки Руководство по : предпочтительные коды завершения программ –
- ^ Поиск Google по запросу «sysexits.h» site:github.com» сообщает «Около 3540 результатов»; получено 21 февраля 2013 г.
- ^ «Коды выхода со специальным значением» .
- ^ «Функция ExitProcess» . Проверено 16 декабря 2016 г.
- ^ «Функция GetExitCodeProcess» . Проверено 22 апреля 2022 г.
- ^ «Возможны коды выхода больше 255?» . Проверено 28 сентября 2009 г.