Какие" стандартные " коды возврата/выхода приложения должны поддерживаться приложением?

существует ли такая вещь, как стандартный набор кодов возврата приложений? Такие вещи, как возвращение 0 для успеха 1 для неудачи, а затем так далее?

У меня есть приложение Windows Server, которое я добавляю некоторые коды ошибок возврата и хотел придерживаться стандартных кодов в дополнение к конкретным приложениям, которые мне понадобятся.

8 ответов


нет такого понятия, как стандартный набор кодов выхода, приложения должны соответствовать.

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


Я думаю, что единственный стандарт-0 для успеха и ненулевой для неудачи. И это скорее условность, чем стандарт.


возможно, вы можете принять некоторые из конвенций Unix.

на еще один ответ пользователь Давид предложил

sysexits.h есть список стандартных кодов выхода. Кажется, это относится по крайней мере к 1993 году, и некоторые большие проекты, такие как Postfix, используют его, поэтому я думаю, что это путь.

С man-страницы OpenBSD:

согласно стилю (9), не рекомендуется вызывать exit (3) с помощью arbi- ценностей, противоречащих указывать на сбой при завершении программы. Вместо этого следует использовать заранее определенные коды выхода из sysexits, чтобы вызывающий процесс мог получить приблизительную оценку класса сбоя, не просматривая исходный код.

Это список, как он отображается в системе Debian:

#define EX_USAGE        64      /* command line usage error */
#define EX_DATAERR      65      /* data format error */
#define EX_NOINPUT      66      /* cannot open input */    
#define EX_NOUSER       67      /* addressee unknown */    
#define EX_NOHOST       68      /* host name unknown */
#define EX_UNAVAILABLE  69      /* service unavailable */
#define EX_SOFTWARE     70      /* internal software error */
#define EX_OSERR        71      /* system error (e.g., can't fork) */
#define EX_OSFILE       72      /* critical OS file missing */
#define EX_CANTCREAT    73      /* can't create (user) output file */
#define EX_IOERR        74      /* input/output error */
#define EX_TEMPFAIL     75      /* temp failure; user is invited to retry */
#define EX_PROTOCOL     76      /* remote error in protocol */
#define EX_NOPERM       77      /* permission denied */
#define EX_CONFIG       78      /* configuration error */

в файле /usr/include/sysexits.h можно найти более подробные описания этих кодов ошибок.


стандартный код состояния EXIT_SUCCESS и EXIT_FAILURE, определена в stdlib.h. В значительной степени все просто используют 0 и 1 соответственно. Некоторые программы будут использовать различные ненулевые коды для различных типов ошибок.


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

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


определенно существуют стандартные коды ошибок, определенные для Windows.

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

Коды Системных Ошибок (Windows)


единственная реальная конвенция это 0 означает успех и ненулевые значения (обычно 1) означает отказ. Официальную ссылку на это см., например, в документах Microsoft C++ на exit:

обычно вызывающий задает status значение 0 для указания нормального выхода или какое-либо другое значение для указания ошибки.

или документы C# на Envrionment.Exit и Environment.ExitCode которая по-разному состояние:

используйте 0 (ноль), чтобы указать, что процесс завершен успешно.

и

значение по умолчанию равно 0 (ноль), что указывает на успешное завершение процесса.

и

используйте ненулевое число для указания ошибки. В приложении можно определить собственные коды ошибок в перечислении и вернуть соответствующий код ошибки на основе сценария. Например, Верните значение 1, чтобы указать, что требуемый файл отсутствует, и значение 2, чтобы указать, что файл находится в неправильном формате. Список кодов выхода, используемых операционной системой Windows, см. В разделе Коды Системных Ошибок в документации Windows.

в отличие от некоторые другие ответчики, я настоятельно рекомендую не использовать Коды Системных Ошибок как коды выхода приложения. Некоторые заметки о Коды Ошибок:

  • Microsoft не советую использовать их в качестве кода завершения приложения в любом месте, и действительно явно предполагают, что вы "определите свои собственные коды ошибок" в документации я цитирую выше.
  • Microsoft не использует их последовательно в качестве кодов выхода в своих собственные приложения или команды. Хотя есть несколько примеров приложений, которые do использовать эти коды, как команду msiexec.exe, есть много других, которые не делают, как dir, dotnet или Эт-Таифе.
  • использование их кажется мне явно плохой идеей. Есть тысячи of Коды Выхода Системы, большинство из которых не имеют отношения к вашему конкретному приложению. Если вы попытаетесь их использовать, вы потеряете возраст, выбирая по списку, чтобы найти коды, которые применяются к вашему сценарию, и конечный результат будет меньше полезно для разработчика, вызывающего ваше приложение, чем если бы вы только что определили небольшое количество кодов выхода, которые имеют значение для вашего конкретного приложения - так что сделайте это вместо этого.

реализовать то, что вы будете использовать. Все остальное излишне.