Python 프로그램을 시작하는 Bash 스크립트가 있습니다. Bash 스크립트 처리 SIGINT
및 정리 작업 수행 SIGTERM
을 SIGHUP
위한 신호 방출. LXTerminal 탭에서 프로세스를 닫으면 정리 프로세스가 발생하는 것을 확인했습니다. 하지만 전체 터미널 창을 닫으면 정리 프로세스가 종료됩니다.
정리 프로세스를 수행하기 위해 내가 놓치고 있는 것은 무엇입니까?
답변1
이건 스크립트야스크립트를 생성하다모든 신호를 포착하려고 시도합니다. 생성된 스크립트( sigcatcher.sh
)는 종료하기 전에 포착된 신호의 이름을 인쇄합니다.
#!/bin/sh
# generate a shell function for each and every available signal.
/bin/kill -l | tr ' ' '\n' |
while read signal; do
cat <<END_OF_FUNCTION
handle_$signal () {
echo "Caught $signal"
exit
}
trap 'handle_$signal' $signal
END_OF_FUNCTION
done >sigcatcher.sh
echo 'echo "$$"; sleep 600' >>sigcatcher.sh
내 시스템(OpenBSD)에서는 /bin/kill -l
사용 가능한 신호 목록이 한 줄에 생성되므로 tr
분할될 수 있습니다.
생성된 스크립트는 다음과 같습니다.
handle_HUP () {
echo "Caught HUP"
exit
}
trap 'handle_HUP' HUP
handle_INT () {
echo "Caught INT"
exit
}
trap 'handle_INT' INT
(등.)
완료될 것이다
echo "$$"; sleep 600
PID를 출력하고 10분 동안 휴면합니다.
다음과 같이 실행합니다.
$ sh ./sigcatcher.sh >sigcatcher.out
그런 다음 창을 닫고 확인합니다 sigcatcher.out
.
X Windows를 실행하지 않지만 tmux
스크립트가 실행 중인 창을 종료하면 출력 파일에 "Caught HUP"가 표시됩니다.