Linux:从kill命令获取退出代码

9
如果我使用 kill 命令向进程发送 SIGTERM 信号,我期望会得到一个退出码,但是在杀死进程后运行下面的命令时,我总是得到0(零):
echo $?

根据这篇帖子中的回答,当向进程发送 SIGTERM 信号时,我应该得到143的返回值:Always app Java end with "Exit 143" Ubuntu。但是我并没有得到这个退出码。为什么呢?
1个回答

14

你得到的退出代码是针对kill命令本身的。0表示它成功了,也就是说另一个进程收到了你发送的信号。kill并不会报告进程的退出状态,因为它甚至无法确定另一个进程是否是由于它所发送的信号而退出。


1
啊,好的!有没有办法检查被杀死的进程的退出代码? - Rox
@Rox:我认为只有父进程直接访问退出状态,所以不能直接访问。 - Fred Foo
2
可以检查被杀死的进程的退出代码。在发送信号之前使用ptrace附加到它。(这可能比它值得的麻烦多了!) 或者,让被杀死的进程的父进程报告其退出状态。 - William Pursell
kill 命令本身的退出代码有参考资料吗? - Ohad Schneider
@OhadSchneider: $ man kill,它告诉我们:0 = 成功,1 = 失败,64 = 部分成功(当指定了多个进程时)。 - NicolasWebDev
2
@Sathors 谢谢。大多数 man 手册都没有提到它,但至少有一些手册提到了(http://man7.org/linux/man-pages/man1/kill.1.html)。谁知道后者是否适用于所有没有在其 man 中提到的系统。总有一天我会明白为什么同一个命令有 19 个不同的 man 手册(我猜想它们与不同的发行版有关,但仍然...)。 - Ohad Schneider

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接