Нет такой вещи, как стандартный набор кодов выхода, которым должны соответствовать приложения.
Однако, как вы упомянули, есть некоторые общие, например, 0. В зависимости от операционной системы и используемых вами инструментов вы можете посмотреть коды выхода для похожих приложений и имитировать их.
Возможно, вы можете принять некоторые из соглашений Unix.
В другом ответе пользователь David предложил
sysexits.h
имеет список стандартных кодов выхода. Кажется, что это датируется по меньшей мере до 1993 года, и некоторые крупные проекты, такие как Postfix, используют его, поэтому я думаю, что это путь.На странице руководства OpenBSD:
В соответствии со стилем (9) нецелесообразно вызывать exit (3) с произвольными значениями, чтобы указать условие отказа при завершении программы. Вместо этого следует использовать предопределенные коды выхода из sysexits, поэтому вызывающий процесс может получить приблизительную оценку класса отказа, не обращая внимания на исходный код.
blockquote> blockquote>Это список, который отображается в системе 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
можно найти более подробные описания эти коды ошибок.
Я думаю, что единственным стандартом является 0 для успеха и ненулевой для отказа. И это скорее соглашение, чем стандарт.
Стандартный код состояния: EXIT_SUCCESS
и EXIT_FAILURE
, определенные в stdlib.h
. Однако почти все используют 0 и 1 соответственно. Некоторое программное обеспечение будет использовать разные ненулевые коды для различных типов ошибок.
Единственное реальное соглашение состоит в том, что 0
означает успех и ненулевые значения (обычно 1
) означает отказ. Для официальной ссылки на это см., Например, документы Microsoft C ++ в exit
:
Как правило, вызывающий абонент устанавливает значение
status
в 0: укажите нормальный выход или какое-либо другое значение, чтобы указать ошибку.Или документы C # на
Envrionment.Exit
иEnvironment.ExitCode
, которые по-разному заявляют:Используйте 0 (ноль), чтобы указать, что процесс завершен успешно.
и
Значение по умолчанию равно 0 (ноль), что указывает на успешное завершение процесса.
и
Используйте ненулевой номер для указания ошибки , В вашем приложении вы можете определить свои собственные коды ошибок в перечислении и вернуть соответствующий код ошибки на основе сценария. Например, верните значение 1, чтобы указать, что требуемый файл отсутствует, и значение 2, чтобы указать, что файл находится в неправильном формате. Список кодов выхода, используемых операционной системой Windows, см. В Системные коды ошибок в документации Windows.
В отличие от некоторые другие ответчики , Я настоятельно рекомендую использовать коды системных ошибок в качестве кодов выхода приложений. Некоторые примечания о кодах системной ошибки :
- Microsoft не рекомендуют использовать их в качестве кодов выхода приложений где угодно , и действительно явным образом предлагаю вам «определить свои собственные коды ошибок» в документации, которую я цитирую выше.
- Microsoft не использует их последовательно в качестве кодов выхода в своих собственные приложения или команды. Хотя некоторые примеры приложений, которые делают , используют эти коды, такие как MsiExec.exe , есть еще много чего, например
dir
,dotnet
или TAEF .- Использование их кажется мне явно плохой идеей. Есть тысяч из System Exit Codes , большинство из которых не имеют отношения к вашему конкретному приложению. Если вы попытаетесь их использовать, вы собираетесь тратить время на сбор списков, чтобы найти коды, применимые к вашему сценарию, и конечный результат будет менее полезен для разработчика, вызывающего ваше приложение, чем если бы вы только что определили небольшое число кодов выхода, которые имеют смысл для вашего конкретного приложения - сделайте это вместо этого.
Определенно существуют стандартные коды ошибок, определенные для Windows.
Давным-давно мы использовали отрицательные ошибки для конкретных «пользовательских» ошибок, но я сомневаюсь, что это хорошая практика.
Внесите то, что вы будете использовать. Все остальное излишне.
Коды выхода далеки от стандартных и больше используются разработчиком для получения соответствующей ошибки, возникшей после возврата приложения. Стандарт 0 для успеха, отличный от нуля для отказа, является общей тенденцией и используется, поскольку он позволяет использовать полный ненулевой диапазон для всех возможных ошибок.
Если ваше приложение регистрирует ошибки надлежащим образом, код выхода, вероятно, будет совершенно ненужным для отслеживания.