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


14

계속 죽이는 bash 스크립트 (Java 프로그램에서 호출)가 있습니다. 나는 항상와 signal 15함께 잡을 수 trap있지만 다른 신호가 나올 것으로 의심 signal 9되지만 실제로는 실제로 눈이 보이지 signal 9않습니다.

나는 당신이 할 수 없다는 것을 알고 trap signal 9있으므로 signal 9쉘 스크립트를 죽이고 있는지 알 수있는 다른 방법 이 있습니까?


4
쉘 스크립트를 실행하는 것은 무엇입니까? 이 프로세스는 또는 다른 것을 status통해 하위 프로세스에 액세스 할 수 있어야 wait(2)합니다.
thrig

upstart로 시작된 데몬으로 실행되는 Java 프로그램이 쉘 스크립트 프로세스를 실행 중입니다.
jgr208

1
프로그램을 시작하고 "SIGKILL에 의해 죽었다"는 -a entry,always -F arch=b64 -S kill -k kill_signals
문구를 찾

답변:


20

종료 된 명령의 종료 상태는 신호 번호에 128을 더한 값이어야합니다. 따라서 종료 상태를 사용하여 처리 한 신호를 종료 할 수 있습니다.

나는 쉘에서 리눅스에서 다음과 같이 테스트했다.

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으로 줄 바꿈됩니다.


1
이것은 갇힐 수없는 신호 9에 대해서만 신뢰할 수 있습니다. 다른 신호는 프로그램에 의해 갇히게되고 어떤 값으로도 종료 될 수 있습니다.
GnP

한나라당, 킬 (kill)에게로 예, -9 traped 수 없습니다
c4f4t0r

소스가 있습니까?
Twifty
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.