以下は、クラッシュする運命にある 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
。
終了ステータスが異なるのはなぜですか? 終了ステータスに依存できない場合、外部コマンドでセグメンテーション違反を検出する方法は何ですか?