Exit
退出程式碼 130 對 postgres 命令意味著什麼?
當嘗試使用
/usr/pgsql-9.2/bin/postgres
命令啟動 PostgreSQL 伺服器時,我得到一個退出值程式碼130
。但是我找不到此命令的退出程式碼的任何文件。是什麼
130
意思?僅供參考,該命令是從基本上如下所示的 java 程式碼執行的:
Process dbProcess = Runtime.getRuntime().exec(cmd); ... int exitCode = dbProcess.exitValue();
在 Linux 和至少在 OpenJDK 上,由返回的值
exitValue()
與 shell 一樣的值相同zsh
orbash
和大多數sh
實現(但不是ksh93
oryash
)將分配給它的$?
變數。也就是說,它是:
- 如果程序退出
exit(n)
或return n
退出: ( )main()
的低 8 位。n``n & 0xFF
- 如果程序被信號殺死
n
:n + 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 INT
或kill -INT
或kill -2
在 shell 中)。$ sleep 10 & [1] 20171 $ kill -s INT "$!" [1] + interrupt sleep 10 $ wait "$!" $ echo "$?" 130