계속해서 종료되는 bash 스크립트(Java 프로그램에서 호출됨)가 있습니다. 나는 항상 그것을 포착 signal 15
하지만 trap
그것이 진짜라고 의심되는 다른 신호가 나타납니다. signal 9
그러나 기본적으로 그것이 진짜인지 전혀 모릅니다 signal 9
.
나는 당신이 할 수 없다는 것을 알고 있습니다 . 그렇다면 내 쉘 스크립트가 종료되었는지 trap
signal 9
알 수 있는 다른 방법이 있습니까 ?signal 9
답변1
종료된 명령의 종료 상태는 신호 번호에 128을 더한 값이어야 합니다. 따라서 종료 상태를 사용하여 어떤 신호가 프로세스를 종료했는지 확인할 수 있습니다.
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
편집: 프로그램은 임의의 1 값으로 종료하기로 결정할 수 있습니다(따라서 종료 상태가 신호의 효과라고 믿는 정도를 결정해야 합니다).
for i in $(seq 256); do
sh -c "exit $i"
echo Program exited with $?
done
각주 1: 내 시스템에서 종료 코드는 부호 없는 8비트 숫자로 표시되므로 256=0으로 줄 바꿈됩니다.