微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

bash – 有没有办法告诉shell脚本是否被信号9杀死了

我有一个bash脚本(从java程序调用),一直被杀死.我总是捕获带有陷阱的信号15,但随后出现了一些其他信号,我怀疑它是信号9,但基本上是盲目的,如果它真的是信号9.

我知道你不能捕获信号9,所以有什么其他方法可以判断信号9是否正在杀死我的shell脚本?

解决方法:

kill命令的退出状态应该是信号编号加128.因此,您可以使用退出状态找出您处理的信号.

我在shell中的Linux上测试了这样:

print_exit_status_for_signal () {
  (
    sleep 1000
    echo Exit staus $? = signal $(( $? - 128 ))
  ) &
  sleep 1
  killall "${1:+-$1}" sleep
}
print_exit_status_for_signal
print_exit_status_for_signal 15
print_exit_status_for_signal 9
print_exit_status_for_signal KILL
print_exit_status_for_signal TERM
@H_502_14@

编辑:请注意,程序可以决定退出任何¹值(因此您必须决定您对退出状态的信任程度是信号的影响):

for i in $(seq 256); do
  sh -c "exit $i"
  echo Program exited with $?
done
@H_502_14@

脚注1:在我的系统上,退出代码表示为无符号的8位数字,因此它们以256 = 0换行.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐