Какой код ошибки возвращает процесс, который segfaults?
какой код ошибки делает процесс, который возвращает segfaults? Из моих экспериментов кажется, что это "139", но я хотел бы узнать, почему это так и насколько это стандартно.
2 ответов
соответствующий syscall (предоставление статуса завершенного процесса) -waitpid (2). В 139 для WIFSIGNALED
и WTERMSIG
etc... В Linux фактические биты описаны во внутреннем файле /usr/include/bits/waitstatus.h
который включен из <sys/wait.h>
заголовок
на wait
, waitpid
вызов стандарт в POSIX и также имена макросов (например,WTERMSIG
etc...). Фактическая реализация этих макросов и фактические номера сигналов, следовательно, код, заданный оболочкой, конкретные реализации.
на сигнал(7) Linux man page дает количество сигналов.
когда процесс завершен, оболочка хранит только 8-битный код возврата, но устанавливает высокий бит, если процесс был аварийно завершен. Но поскольку ваш процесс завершается ошибкой сегментации, обычно посылается сигнал SIGSEGV (недопустимая ссылка на память), который имеет значение 11.
Итак, поскольку ваш процесс был прерван ненормально, у вас есть 128, а затем вы добавляете значение сигнала, который завершил процесс, который был 11, вы получаете 139.