以下是将导致崩溃的 C 代码:
#include<stdio.h>
#include<stdlib.h>
int main() {
char *p = NULL;
printf("Value at P: %c\n", *p);
return 0;
}
当我在RH4机器上使用gcc 4.5.2进行编译和运行时,可预见地会出现分段错误:
% ./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
则表示是否有内核转储(core dump)。
11 >> 8
的结果是0
,11 & 127
的结果是11
。
为什么会有不同的退出状态?如果我们不能依赖退出状态,那么如何检测外部命令的分段错误(segmentation fault)呢?
$status
是如何设置的? - Zaid139&127=11
。 - Miklos Aubert状态:-e行1处的139。
- Miklos Aubert139&127
等同于11&127
。任何大于127的数字都将别名为n%128
。 - Zaid