Jump to content

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

(Перенаправлено с кода возврата )

В вычислениях статус завершения или код завершения завершенного процесса представляет собой целое число, которое становится доступным его родительскому процессу (или вызывающему объекту). В 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 успех обозначается нечетными значениями, а неудача — четными. Значение представляет собой 32-битное целое число с подполями: управляющие биты, номер объекта, номер сообщения и серьезность. Значения серьезности делятся на успех (успех, информационный) и сбой (предупреждение, ошибка, фатальный). [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 объект.

См. также

[ редактировать ]
  1. ^ «Уровни ошибок» . Страницы сценариев Роба ван дер Вуда . Проверено 26 августа 2007 г.
  2. ^ «Командный язык оболочки — статус выхода для команд» . Открытая группа . Проверено 7 июля 2015 г.
  3. ^ Jump up to: а б «Справочное руководство библиотеки GNU C 25.6.2: Статус выхода» . Gnu.org . Проверено 9 июля 2012 г.
  4. ^ 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]
  5. ^ Ауэр, Эрик; Пол, Матиас Р.; Холл, Джим (24 декабря 2015 г.) [31 декабря 2003 г.]. «Уровни ошибок MS-DOS» . Архивировано из оригинала 24 декабря 2015 г.
  6. ^ 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]
  7. ^ Аллен, Уильям; Аллен, Линда. «УРОВНИ ОШИБОК Windows 95/98/ME» . Архивировано из оригинала 7 июля 2011 г.
  8. ^ «Java 1.6.0 API» . Сан Микросистемс . Проверено 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» site:github.com» сообщает «Около 3540 результатов»; получено 21 февраля 2013 г.
  17. ^ «Коды выхода со специальным значением» .
  18. ^ «Функция ExitProcess» . Проверено 16 декабря 2016 г.
  19. ^ «Функция GetExitCodeProcess» . Проверено 22 апреля 2022 г.
  20. ^ «Возможны коды выхода больше 255?» . Проверено 28 сентября 2009 г.
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 43ef56eefb2b56cc293256605fceab7c__1710275160
URL1:https://arc.ask3.ru/arc/aa/43/7c/43ef56eefb2b56cc293256605fceab7c.html
Заголовок, (Title) документа по адресу, URL1:
Exit status - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)