14

セグメンテーション違反を起こしたプロセスが返すエラー コードは何ですか? 私の実験では「139」のように見えますが、なぜそうなのか、どの程度標準なのかを知りたいです。

4

2 に答える 2

25

プロセスが終了すると、シェルは 8 ビットの戻りコードのみを格納しますが、プロセスが異常終了した場合は上位ビットを設定します。ただし、プロセスはセグメンテーション違反によって終了するため、通常、送信されるシグナルは SIGSEGV (無効なメモリ参照) で、値は 11 です。

したがって、プロセスが異常終了したため、128 があり、11 だったプロセスを終了したシグナルの値を追加すると、139 が得られます。

于 2013-01-30T08:45:03.840 に答える
11

関連する syscall (終了したプロセスのステータスを与える) は、waitpid(2)です。139はWIFSIGNALEDなどWTERMSIGです... Linuxでは、実際のビットはヘッダー/usr/include/bits/waitstatus.hから含まれる内部ファイルに記述されています<sys/wait.h>

,呼び出しはPOSIX の標準でwaitあり、マクロ名 ( etc... など) も同様です。これらのマクロの実際の実装、および実際のシグナル番号、したがってシェルによって提供されるコードは、実装によって異なります。waitpidWTERMSIG

signal(7) Linuxのman ページには、シグナルの数が記載されています。

于 2013-01-30T08:40:03.047 に答える