seguito riporta il codice C che è destinato a mandare in crash:in perl, come possiamo rilevare un errore di segmentazione in un comando esterno
#include<stdio.h>
#include<stdlib.h>
int main() {
char *p = NULL;
printf("Value at P: %c\n", *p);
return 0;
}
Quando compilo ed eseguirlo (macchina RH4 con gcc 4.5.2), dà prevedibilmente un errore di segmentazione:
% ./a.out
Segmentation fault
% echo $status
139
Se l'eseguo con Perl v5.8.5, questo accade:
% perl -e 'system("./a.out") and die "Status: $?"'
Status: 11 at -e line 1.
Th e perlvar documentazione per $?
dice che
Così, il valore di uscita del sottoprocesso è davvero
($?>> 8)
, e$? & 127
dà quale segnale, se del caso, il processo è morto, e$? & 128
rapporti se ci fosse un core dump.
11 >> 8
è 0
, e 11 & 127
è 11
.
Perché i diversi stati di uscita? Se non possiamo dipendere dallo stato di uscita, quale dovrebbe essere il modo di rilevare l'errore di segmentazione in un comando esterno?
Come viene impostato '$ stato'? – Zaid
Sembra che tu stia effettivamente ricevendo il segnale dal quale il processo è morto: 11 è un errore di segmentazione e '139 & 127 = 11' –
L'ho appena provato con Cygwin (perl v 5.14.2) e mi ha dato:' Stato : 139 at -e line 1.' –