Lorsqu'un processus est terminé, le shell ne stocke qu'un code de retour de 8 bits, mais définit le bit haut si le processus s'est terminé de manière anormale. Mais comme votre processus se termine par une erreur de segmentation, le signal envoyé est généralement SIGSEGV (référence mémoire invalide) qui a une valeur de 11.
Donc parce que votre processus s'est terminé anormalement, vous avez un 128 et puis vous ajoutez la valeur du signal qui a terminé le processus qui était 11, vous obtenez 139.
L'appel système pertinent (donnant l'état d'un processus terminé) est waitpid(2). Le 139 est pour WIFSIGNALED
et WTERMSIG
etc... Sous Linux les bits réels sont décrits dans le fichier interne /usr/include/bits/waitstatus.h
qui est inclus à partir de <sys/wait.h>
en-tête
Le wait
, waitpid
call est standard dans POSIX, tout comme les noms de macro (comme WTERMSIG
etc...). L'implémentation réelle de ces macros et les numéros de signal réels, d'où le code donné par le shell, sont spécifiques à l'implémentation.
La page de manuel signal(7) de Linux donne le nombre de signaux.