実行中のプログラムのbash端末を閉じたときに送信される信号

実行中のプログラムのbash端末を閉じたときに送信される信号

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」と表示されます。

おすすめ記事