
Ich habe ein Bash-Skript (das von einem Java-Programm aufgerufen wird), das immer wieder beendet wird. Ich fange es immer ab, signal 15
aber trap
dann kommt ein anderes Signal, von dem ich vermute, dass es das ist, signal 9
aber ich bin im Grunde blind, ob es das wirklich ist signal 9
.
Ich weiß, dass Sie das nicht können trap
signal 9
. Gibt es also eine andere Möglichkeit, herauszufinden, ob signal 9
mein Shell-Skript beendet wird?
Antwort1
Der Beendigungsstatus eines beendeten Befehls sollte der Signalnummer plus 128 entsprechen. So können Sie anhand des Beendigungsstatus herausfinden, welches Signal Ihren Prozess beendet hat.
Ich habe es unter Linux in der Shell folgendermaßen getestet:
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
BEARBEITEN: Beachten Sie, dass ein Programm entscheiden kann, mit jedem beliebigen¹ Wert zu beenden (Sie müssen also entscheiden, inwieweit Sie darauf vertrauen, dass der Beendigungsstatus die Auswirkung eines Signals ist):
for i in $(seq 256); do
sh -c "exit $i"
echo Program exited with $?
done
Fußnote 1: Auf meinen Systemen werden Exitcodes als vorzeichenlose 8-Bit-Zahlen dargestellt, sodass sie bei 256=0 umbrochen werden.