退出代码 130 对于 postgres 命令意味着什么?

退出代码 130 对于 postgres 命令意味着什么?

当尝试使用命令启动 PostgreSQL 服务器时,/usr/pgsql-9.2/bin/postgres我得到的退出值代码为130

但是我找不到该命令的退出代码的任何文档。这是什么130意思?

仅供参考,该命令是从 java 代码执行的,基本上如下所示:

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

答案1

在 Linux 上并使用 OpenJDK至少,返回的值与像or 这样的shell和大多数实现(但不是or )分配给其变量的exitValue()值相同。zshbashshksh93yash$?

也就是说,它是:

  • 如果进程以exit(n)return n从: ( )main()的低 8 位退出。nn & 0xFF
  • 如果进程被信号杀死nn + 128

因此,如果您得到数字 130,则存在歧义,因为您不知道进程是因信号 2 而终止还是只是执行了exit(130)

然而,因为很多 shell 都遵循 具有 的约定128 + signal_number,所以程序知道避免使用高于 128 的值作为退出代码(或者当它们这样做时exit(130),它是为了报告一个因信号 2 而死亡的孩子的死亡,就像某些 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或在 shell 中)kill -INTkill -2

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

相关内容