以下は、クラッシュする運命にある 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のドキュメントに$?は、次のように書かれています。
したがって、サブプロセスの終了値は really
($?>> 8 )であり、プロセスが終了$? & 127したシグナルがある場合はそれを示し$? & 128、コア ダンプがあったかどうかを報告します。
11 >> 8です0、そして11 & 127です11。
終了ステータスが異なるのはなぜですか? 終了ステータスに依存できない場合、外部コマンドでセグメンテーション違反を検出する方法は何ですか?