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
使用可能な信号のリストが1行に生成されるため、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」と表示されます。