Вы только получаете четкое изображение стека так же, как ядро руки прочь к ld.so
, динамический компоновщик. Можно найти основное изображение здесь. Это показывает argc
, argv
и envp
, традиционные 3 аргумента программе C int main(int argc, char **argv, char **envp)
.
То представление несколько упрощенно. ELF вспомогательный вектор существует на стеке также и передает большую информацию к ld.so
После ld.so
выполнения, libc время выполнения вступает и усложняет вещи. Конструкторы C++ могут быть выполнены, все виды сумасшедшего материала могут закончиться на стеке. Это зависит от того, что скомпилировало программу. Даже простые программы C могут сделать разные вещи на основе того, с какой библиотекой они были скомпилированы.
Выход с кодом 99 не имеет никакого значения, кроме, возможно, в контексте конкретной программы.
В любом случае, exit
выходит из оболочки с определенным кодом выхода, в данном случае 99. Дополнительную информацию можно найти в help exit
:
exit: exit [n]
Exit the shell.
Exits the shell with a status of N. If N is omitted, the exit status
is that of the last command executed.
Существует очень давнее соглашение (в Unix) для диапазонов возвращаемого статуса:
Что именно означают эти отдельные положительные и отрицательные числа, зависит от программиста. Иногда вы можете выбрать их для совместимости с другими похожими программами (например, инструментами Gnu). @ Gnouc перечисляет некоторые из них.
Нет, мне не известно о каком-либо особом значении кода выхода 99, никогда не видел, чтобы он использовался. Может быть, это означает «Недостаточно пива»
См .:
Некоторые программисты предоставляют множество различных кодов ошибок, начиная с 1.
В новых версиях могут появиться новые конкретные коды ошибок, поэтому какой код следует использовать для
"всех остальных ошибок / не указано error "?
Коды выхода будут обрезаны до 255, поэтому я бы выбрал 99 как" другую ошибку ".
Обычно, если вы закончите свой сценарий в какой-то момент:
exit 0
Оболочка получит 0 в качестве кода возврата . Этот ноль означает , что все в порядке .
Однако, если ваша программа обнаружила некоторую ошибку, вы должны выйти с ненулевым кодом возврата, чтобы сообщить оболочке, что что-то пошло не так. Если вы не хотите быть более конкретным, вы можете просто использовать 1.
exit 1
Однако вы можете сообщить оболочке о конкретном типе сбоев, используя другие числа. Например, bash
сам возвращает 127 для , программа не найдена . Итак, если вы документируете поведение своего скрипта, вы можете сделать что-нибудь полезное после его запуска, проверив значение специальной переменной $?
, которая содержит код возврата последней выполненной программы.
Я изучал это некоторое время назад и обнаружил, что, например, FreeBDS имеет несколько очень полезных соглашений относительно кодов выхода, задокументированных в man 3 sysexits