Что действительно выходит из 99 средств?

Вы только получаете четкое изображение стека так же, как ядро руки прочь к ld.so, динамический компоновщик. Можно найти основное изображение здесь. Это показывает argc, argv и envp, традиционные 3 аргумента программе C int main(int argc, char **argv, char **envp).

То представление несколько упрощенно. ELF вспомогательный вектор существует на стеке также и передает большую информацию к ld.so

После ld.so выполнения, libc время выполнения вступает и усложняет вещи. Конструкторы C++ могут быть выполнены, все виды сумасшедшего материала могут закончиться на стеке. Это зависит от того, что скомпилировало программу. Даже простые программы C могут сделать разные вещи на основе того, с какой библиотекой они были скомпилированы.

4
06.01.2019, 23:40
5 ответов

Выход с кодом 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.
22
27.01.2020, 20:44

В дополнение к @Chris Down, есть некоторый код возврата, зарезервированный для оболочки, они имеют особое значение:

RETVAL   Meaning

1        General errors
2        Misusage
127      Command not found

Вы можете обратиться к this для получения более подробной информации.

13
27.01.2020, 20:44

Существует очень давнее соглашение (в Unix) для диапазонов возвращаемого статуса:

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

Что именно означают эти отдельные положительные и отрицательные числа, зависит от программиста. Иногда вы можете выбрать их для совместимости с другими похожими программами (например, инструментами Gnu). @ Gnouc перечисляет некоторые из них.

Нет, мне не известно о каком-либо особом значении кода выхода 99, никогда не видел, чтобы он использовался. Может быть, это означает «Недостаточно пива»

См .:

0
27.01.2020, 20:44

Некоторые программисты предоставляют множество различных кодов ошибок, начиная с 1. В новых версиях могут появиться новые конкретные коды ошибок, поэтому какой код следует использовать для
"всех остальных ошибок / не указано error "? Коды выхода будут обрезаны до 255, поэтому я бы выбрал 99 как" другую ошибку ".

0
27.01.2020, 20:44

Обычно, если вы закончите свой сценарий в какой-то момент:

exit 0

Оболочка получит 0 в качестве кода возврата . Этот ноль означает , что все в порядке .

Однако, если ваша программа обнаружила некоторую ошибку, вы должны выйти с ненулевым кодом возврата, чтобы сообщить оболочке, что что-то пошло не так. Если вы не хотите быть более конкретным, вы можете просто использовать 1.

exit 1

Однако вы можете сообщить оболочке о конкретном типе сбоев, используя другие числа. Например, bash сам возвращает 127 для , программа не найдена . Итак, если вы документируете поведение своего скрипта, вы можете сделать что-нибудь полезное после его запуска, проверив значение специальной переменной $? , которая содержит код возврата последней выполненной программы.

Я изучал это некоторое время назад и обнаружил, что, например, FreeBDS имеет несколько очень полезных соглашений относительно кодов выхода, задокументированных в man 3 sysexits

2
27.01.2020, 20:44

Теги

Похожие вопросы