Exit

退出程式碼 130 對 postgres 命令意味著什麼?

  • August 14, 2015

當嘗試使用/usr/pgsql-9.2/bin/postgres命令啟動 PostgreSQL 伺服器時,我得到一個退出值程式碼130

但是我找不到此命令的退出程式碼的任何文件。是什麼130意思?

僅供參考,該命令是從基本上如下所示的 java 程式碼執行的:

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

在 Linux 和至少在 OpenJDK 上,由返回的值exitValue()與 shell 一樣的值相同zshorbash和大多數sh實現(但不是ksh93or yash)將分配給它的$?變數。

也就是說,它是:

  • 如果程序退出exit(n)return n退出: ( )main()的低 8 位。n``n & 0xFF
  • 如果程序被信號殺死nn + 128

因此,如果您得到數字 130,則存在歧義,因為您不知道程序是死於信號 2 還是僅僅執行了exit(130).

然而,因為有這麼多的 shell 遵循有的約定128 + signal_number,程序知道避免使用高於 128 的值作為它們的退出程式碼(或者當他們這樣做時exit(130),它是報告一個孩子的死亡,就像一些 shell 在某些情況)。

所以在這裡,很可能,程序死於信號 2。你可以通過執行來判斷是什麼信號:

$ kill -l 130
INT

在 POSIX 樣式的 shell 的提示下。

在大多數係統上,信號 2 將是 SIGINT。這是當您在該終端中按 Ctrl-C 時發送到該終端的前台程序組的信號。

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

SIGINT 應該保留用於終端中斷,並且應用程序不應將其發送到其他程序,但沒有什麼可以阻止它們這樣做,因此仍然有可能某些東西做了kill(postgres_pid, SIGINT)kill -s INTkill -INTkill -2在 shell 中)。

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

引用自:https://unix.stackexchange.com/questions/223189