Linux Как получить описание ошибки по номеру ошибки

В linux (в частности, у меня Ubuntu 14), если какая-то программа заканчивается ошибкой, я могу получить числовой код ошибки через $? переменная

 $ ./failing_app $ echo $? 

Однако сам номер не говорит мне, как мне получить имя и описание ошибки?

Существует список ошибок в $ man errno но он дает только имена, а не числовые значения.

Я искал google, и результаты довольно странные: например, у меня есть игрушка Rust, в которой я пытаюсь получить доступ к элементу массива за пределами границ. Паника программы и $? составляет 101 , однако, как говорят, он соответствует ошибке Network unreachable , что не имеет никакого смысла.

Статус выхода программы ( $? В оболочке) не связан с C errno .

В программе на C, как правило, статус выхода поступает из аргумента для exit или возвращаемого значения main . Соглашение состоит в том, что 0 означает успешный выход (или true для оболочки), а другие значения – сбой (ir false).

Однако, если программа умерла от приема сигнала, shell устанавливает $? до 128 плюс номер сигнала. Например, при ошибке сегментации ( SIGSEGV , которая равна 11), $? будет 139.

Чтобы перечислить номера сигналов, я запустил kill -l .

Единого центрального определяющего органа нет. Каждая программа назначает свою собственную семантику кодам ошибок. У хороших есть документация на странице руководства; например, см., например, страницы руководства grep и xargs от GNU.

На странице выхода Linux (3) также отмечается, что «BSD попытался стандартизировать коды выхода». Страница sysexits BSD sysexits (3) на самом деле является хорошим рекомендуемым чтением, как указано, шина, чуть больше, чем подталкивание для ограниченного числа сценариев ошибок.

Ядро имеет гораздо более подробный и хорошо документированный набор возможных ошибок и их причин, но это, очевидно, ограничено системными вызовами и вообще не затрагивает ошибки на уровне приложений. Для Linux см. Справочную страницу errno (3).

В Руководстве по разработке сценариев Advanced Bash имеется раздел об общих соглашениях; http://tldp.org/LDP/abs/html/exitcodes.html#EXITCODESREF – но, как и ABS в целом, это нечестивая смесь стандартов, условностей, личного мнения автора, догадок и лжи. (Ни один из кодов выхода в таблице «зарезервирован», даже если он так говорит, а текст, который относится к таблице, подчеркивает этот неправильный факт.)

Эта ссылка содержит список ошибок с номерами. Надеюсь, это то, что вы ищете. http://www.thegeekstuff.com/2010/10/linux-error-codes/

Кроме того, в моей системе я вижу файл /usr/include/asm-generic/errno-base.h содержит определения ошибок, а также номера ошибок. Это будет лучше, чем ссылка.