postgresコマンドで終了コード130はどういう意味ですか?

postgresコマンドで終了コード130はどういう意味ですか?

コマンドを使用してPostgreSQLサーバーを起動しようとすると、/usr/pgsql-9.2/bin/postgres終了値codeが表示されます130

ただし、このコマンドの終了コードに関するドキュメントが見つかりません。どういう意味ですか130

ちなみに、このコマンドはJavaコードで実行され、デフォルトでは次のようになります。

Process dbProcess = Runtime.getRuntime().exec(cmd);
...
int exitCode = dbProcess.exitValue();

答え1

LinuxとOpenJDKの使用少なくとも返される値は、exitValue()orのようなシェルとほとんどの実装(orではない)がその変数に割り当てる値と同じです。zshbashshksh93yash$?

つまり、次のようになります。

  • プロセスが次の下位8ビットで終了する場合exit(n):(return n)。main()nn & 0xFF
  • プロセスが信号によって終了する場合nn + 128

したがって、数字130を取得すると、プロセスがシグナル2で終了したのか、それとも実行されたのかわからないため、あいまいさがありますexit(130)

しかし、多くのシェルは持っている規則に従うので、128 + signal_numberプログラムは終了コードとして128より高い値を使用しないことを知っています(またはそうするとき、誰かexit(130)のようにシグナル2によって死亡した子供の死を報告することがあります)シェル)。

したがって、ここでプロセスは信号2によって終了する可能性が高くなります。次のコマンドを実行して、信号が何であるかを知ることができます。

$ kill -l 130
INT

POSIXスタイルのシェルのプロンプトから。

ほとんどのシステムでは、シグナル2はSIGINTです。これは、端末でCtrl-Cを押したときに端末のフォアグラウンドプロセスグループに送信される信号です。

$ sleep 10
^C
$ echo "$?"
130

SIGINTはターミナル割り込みのために予約する必要があり、アプリケーションはそれを他のプロセスに転送してはいけませんが、そうすることを防ぐ方法はないのでkill(postgres_pid, SIGINT)kill -s INTまたはシェルで)まだ問題が発生する可能性がありますkill -INTkill -2

$ sleep 10 &
[1] 20171
$ kill -s INT "$!"
[1]  + interrupt  sleep 10
$ wait "$!"
$ echo "$?"
130

関連情報