以下是注定要崩溃的 C 代码:
#include<stdio.h>
#include<stdlib.h>
int main() {
char *p = NULL;
printf("Value at P: %c\n", *p);
return 0;
}
当我编译并运行它(使用 gcc 4.5.2 的 RH4 机器)时,它可以预见地给出了分段错误:
% ./a.out
Segmentation fault
% echo $status
139
如果我用 Perl v5.8.5 运行它,会发生这种情况:
% perl -e 'system("./a.out") and die "Status: $?"'
Status: 11 at -e line 1.
perlvar文档$?
说_
因此,子进程的退出值是真的
($?>> 8 )
,并$? & 127
给出进程死于哪个信号(如果有),并$? & 128
报告是否存在核心转储。
11 >> 8
是0
,并且11 & 127
是11
。
为什么不同的退出状态?如果我们不能依赖退出状态,那么在外部命令中检测分段错误的方法应该是什么?