それぞれ独自のログファイルを作成する複数のサブシェルを検討してください。サブシェルが失敗しSIGTERM
(一部のメカニズムを使用して)、すべてのサブシェルにメッセージが送信されることを検討してください。SIGTERM
すべてのサブシェルは受信直後に終了します。ただし、SIGTERM
-で終わるサブシェルログファイルは保持されます。それが問題だ。
Q:サブシェルログファイルを受け取った後にどのように削除しますかSIGTERM
?
私はこれを試しました:
_term()
{
rm -f $log_file
}
trap _term SIGTERM
しかし、私が理解したところによると、これはうまくいきません。なぜなら」トラップハンドラはサブシェルから継承されません。」。
内部に説明trap
わかります:
無視されないトラップは、サブシェルに入るとデフォルトの動作に設定されます。これは、新しいトラップを設定するためにサブシェルでTrapコマンドを使用できないという意味ではありません。
最後の文章が少し混乱しています。これが可能かどうかを説明できますか?別の言葉SIGTERM
(または他の方法で)サブシェルにキャプチャされますか?
答え1
はい、遺伝的ではありません。ただし、サブシェルで新しいトラップを定義できます。親シェルには独自のトラップセットがあります。
その後、親シェルにシグナルを送信すると、親シェルはシグナルをキャプチャし、独自のシグナルセットをサブシェルにエクスポートできます。
説明を含むさまざまな例は次のとおりです。 https://tldp.org/LDP/abs/html/debugging.html#EX76