sda*_*bet 7 exit postgresql exit-status
尝试使用该/usr/pgsql-9.2/bin/postgres
命令启动 PostgreSQL 服务器时,我得到一个退出值代码130
.
但是,我找不到有关此命令退出代码的任何文档。什么130
意思?
仅供参考,该命令是从 Java 代码执行的,该代码基本上如下所示:
Process dbProcess = Runtime.getRuntime().exec(cmd);
...
int exitCode = dbProcess.exitValue();
Run Code Online (Sandbox Code Playgroud)
Sté*_*las 11
至少在 Linux 和 OpenJDK上,返回的值exitValue()
与 shell 之类的zsh
orbash
和大多数sh
实现(但不是ksh93
or yash
)分配给其$?
变量的值相同。
也就是说,它是:
exit(n)
或return n
from退出main()
:n
( n & 0xFF
)的低 8 位。n
:n + 128
。因此,如果您得到 130 的数字,则存在歧义,因为您不知道进程是死于信号 2 还是只是执行了exit(130)
.
然而,因为如此多的 shell 都遵循 have 的约定128 + signal_number
,程序知道避免使用 128 以上的值作为退出代码(或者当他们这样做时exit(130)
,它会报告一个孩子的死亡,该孩子死于信号 2,就像一些 shell 在某些情况)。
所以在这里,最有可能的是,该进程死于信号 2。您可以通过运行来判断是什么信号:
$ kill -l 130
INT
Run Code Online (Sandbox Code Playgroud)
在 POSIX 风格的 shell 的提示下。
在大多数系统上,信号 2 将是 SIGINT。这是当您在该终端中按 Ctrl-C 时发送到该终端的前台进程组的信号。
$ sleep 10
^C
$ echo "$?"
130
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5313 次 |
最近记录: |