Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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

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

Семантика [ править ]

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

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

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

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

DOS [ править ]

В терминологии DOS уровень ошибок - это целочисленный код выхода, возвращаемый исполняемой программой или подпрограммой . Уровни ошибок обычно находятся в диапазоне от 0 до 255. В DOS доступно только 256 кодов ошибок.

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

Java [ править ]

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

OpenVMS [ править ]

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

POSIX [ править ]

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

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

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

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

ОС, производные от BSD, определили обширный набор предпочтительных интерпретаций: значения для 15 кодов состояния с 64 по 78 определены в sysexits.h . [11] Исторически они являются производными от sendmail и других агентов передачи сообщений , но с тех пор они нашли применение во многих других программах. [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 в errorlevelтерминологии, унаследованной от DOS . Процессы .NET Framework и Windows PowerShell называют его ExitCodeсвойством Processобъекта.

См. Также [ править ]

  • Код ошибки
  • Заявление о возврате
  • истина и ложь (команды)

Ссылки [ править ]

  1. ^ "Уровни ошибок" . Страницы сценариев Роба ван дер Вуда . Проверено 26 августа 2007 .
  2. ^ «Язык команд оболочки - Статус выхода для команд» . Открытая группа . Проверено 7 июля 2015 года .
  3. ^ a b «Справочное руководство библиотеки GNU C 25.6.2: Статус выхода» . Gnu.org . Проверено 9 июля 2012 .
  4. ^ «Java 1.6.0 API» . Солнце . Проверено 6 мая 2008 .
  5. ^ «Формат OpenVMS возвращаемых значений статуса» . H71000.www7.hp.com. Архивировано из оригинала на 2012-03-19 . Проверено 9 июля 2012 .
  6. ^ sys_wait.h  - Справочник по базовым определениям, Единая спецификация UNIX , выпуск 7 от Open Group
  7. ^ waitid  - Справочник по системным интерфейсам, Единая спецификация UNIX , выпуск 7 от The Open Group
  8. ^ wait  - Справочник по системным интерфейсам, Единая спецификация UNIX , выпуск 7 от The Open Group
  9. ^ «2.4.3 Сигнальные действия» . Открытая группа . Проверено 8 февраля 2019 .
  10. ^ «Глава 6. Выход и статус выхода» . Faqs.org . Проверено 9 июля 2012 .
  11. ^ sysexits(3) : предпочтительные коды выхода для программ -  FreeBSD Library Functions Manual
  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" . Проверено 16 декабря 2016 .
  15. ^ "ExitCodes больше 255, возможно?" . Проверено 28 сентября 2009 .
  16. ^ «Коды системных ошибок Windows (коды выхода)» . Проверено 28 сентября 2009 .
  17. ^ «Коды системных ошибок статьи MSDN» . Microsoft.