신호 9에 의해 쉘 스크립트가 종료되었는지 알 수 있는 방법이 있습니까?

신호 9에 의해 쉘 스크립트가 종료되었는지 알 수 있는 방법이 있습니까?

계속해서 종료되는 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으로 줄 바꿈됩니다.

관련 정보