Quando un processo viene terminato, la shell memorizza solo un codice di ritorno a 8 bit, ma imposta il bit alto se il processo è stato terminato in modo anomalo. Ma poiché il tuo processo è terminato da un errore di segmentazione, di solito il segnale che viene inviato è SIGSEGV (riferimento di memoria non valido) che ha un valore di 11.
Quindi, poiché il tuo processo è stato terminato in modo anomalo, hai un 128 e poi aggiungi il valore del segnale che ha terminato il processo che era 11, ottieni 139.
La chiamata di sistema pertinente (che fornisce lo stato di un processo terminato) è waitpid(2). Il 139 sta per WIFSIGNALED
e WTERMSIG
ecc... Su Linux i bit effettivi sono descritti nel file interno /usr/include/bits/waitstatus.h
che è incluso da <sys/wait.h>
intestazione
Il wait
, waitpid
call è standard in POSIX, così come i nomi delle macro (come WTERMSIG
eccetera...). L'implementazione effettiva di queste macro e i numeri di segnale effettivi, quindi il codice fornito dalla shell, sono specifici dell'implementazione.
La pagina man di signal(7) Linux fornisce il numero dei segnali.