我有一个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] 举报,一经查实,本站将立刻删除。