Cuando finaliza un proceso, el shell solo almacena un código de retorno de 8 bits, pero establece el bit alto si el proceso finalizó de manera anormal. Pero debido a que su proceso finaliza por una falla de segmentación, generalmente la señal que se envía es SIGSEGV (referencia de memoria no válida) que tiene un valor de 11.
Entonces, debido a que su proceso terminó de manera anormal, tiene 128 y luego agrega el valor de la señal que terminó el proceso, que fue 11, y obtiene 139.
La llamada al sistema relevante (que da el estado de un proceso finalizado) es waitpid(2). El 139 es para WIFSIGNALED
y WTERMSIG
etc... En Linux, los bits reales se describen en el archivo interno /usr/include/bits/waitstatus.h
que se incluye desde <sys/wait.h>
encabezado
El wait
, waitpid
la llamada es estándar en POSIX y también lo son los nombres de las macros (como WTERMSIG
etc...). La implementación real de estas macros y los números de señal reales, por lo tanto, el código proporcionado por el shell, son específicos de la implementación.
La página de manual de Signal(7) Linux proporciona el número de señales.