
계속해서 종료되는 bash 스크립트(Java 프로그램에서 호출됨)가 있습니다. 나는 항상 signal 15
with 를 포착 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
편집: 프로그램은 임의의 값으로 종료하기로 결정할 수 있습니다. 따라서 종료 상태가 신호의 영향을 얼마나 신뢰할지 결정해야 합니다.
for i in $(seq 256); do
sh -c "exit $i"
echo Program exited with $?
done
각주 1: 내 시스템에서 종료 코드는 부호 없는 8비트 숫자로 표시되므로 256=0으로 줄 바꿈됩니다.