8

以下は、クラッシュする運命にある 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

終了ステータスが異なるのはなぜですか? 終了ステータスに依存できない場合、外部コマンドでセグメンテーション違反を検出する方法は何ですか?

4

2 に答える 2