Following is C code that is destined to crash:
#include<stdio.h>
#include<stdlib.h>
int main() {
char *p = NULL;
printf("Value at P: %c
", *p);
return 0;
}
When I compile and run it (RH4 machine with gcc 4.5.2), it predictably gives a segmentation fault:
% ./a.out
Segmentation fault
% echo $status
139
If I run it with Perl v5.8.5, this happens:
% perl -e 'system("./a.out") and die "Status: $?"'
Status: 11 at -e line 1.
The perlvar documentation for $?
says that
Thus, the exit value of the subprocess is really ($?>> 8 )
, and $? &
127
gives which signal, if any, the process died from, and $? & 128
reports whether there was a core dump.
11 >> 8
is 0
, and 11 & 127
is 11
.
Why the different exit statuses? If we cannot depend on the exit status, what should be the way to detect segmentation fault in an external command?
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…