Ответ 1
Не существует стандартизированного значения для кодов выхода программ за пределами "0". все остальное означает, что что-то пошло не так ". И строго, это относится только к C и С++ - там, exit(0);
или exit(EXIT_SUCCESS);
оба выхода с успехом, но значение, возвращаемое в O/S, может быть другим.
Существуют исключения даже для правила "нуль-на-успех". Очевидно, есть небрежные программы, которые не возвращают определенный статус выхода; такие программы лучше избегать. Существуют и другие не столь небрежные программы, которые всегда возвращают 0, даже если что-то пошло не так; их также часто избегают.
Однако существуют также программы, которые тщательно кодируют довольно много информации в статус выхода, и просто получение ненулевого статуса выхода не означает, что такие программы не удались. Конечно, программы документируют значения статусов выхода.
POSIX осторожно документирует состояния выхода для программ.
Страницы руководства для программы должны документировать статусы выхода. В Unix, если такой документации нет, тогда принимайте zero-on-success, а все остальное - сбой.
Обратите внимание, что если bash
не может выполнить команду, он вернет стилизованные статусы:
- 127, если файл не существует или не может быть найден
- 126, если у вас нет разрешения на выполнение в файле
Кроме того, если программа умирает из-за сигнала, bash
позволяет вам узнать, закодировав статус выхода как:
-
128 + signal-number
Следовательно, SIGHUP дает 129, SIGILL дает 132, SIGTERM дает 143 и т.д. Однако программа может выйти с любым из этих статусов и означать что-то отличное от того, что означает bash
. Тем не менее, это относительно необычная программа, которая выходит из любого из этих статусов выхода, поэтому вы обычно безопасны.
Обратите внимание, что разные операционные системы имеют разные соглашения: Unix обеспечивает 8-битный статус с нулем для успеха; Windows предоставляет гораздо больший диапазон значений статуса выхода (16 бит или 32 бита); Полагаю, что VMS использовал нуль для обозначения отказа.