サブシェルでの信号伝播が気になります。次のbashスクリプトがあります。
#!/bin/bash
function test_trap() {
echo "hello"
}
trap 'test_trap' SIGUSR2
(#subshell
trap 'test_trap' SIGUSR2
some_command
)
other commands
次に、SGEグリッドエンジンを使用してそれをグリッドに送信します。問題は、ジョブをキャンセルすると、SGEがジョブにSIGUSR2シグナルを送信してから事前設定された時間が経過した後(またはスクリプトがシグナルを処理していない場合、またはすでに処理している場合)にSIGKILLを送信することです。
私の問題は、何らかの方法でシグナルがサブシェル内のコマンドに到達できないことです。ただしsleep 1
、トラップに簡単なコマンドを追加すると、信号が正しく伝播します。しかし、これはSGEの問題かもしれませんが、bashスクリプト自体で愚かなことをしていないことを確認したかったのです。