2017-12-21 8 views
1

これはスクリプトで、名前は、私が直接Linuxのbashでnohup ./test.sh &を実行する場合、それは殺す-3 PID信号をキャッチすることができますなぜトラップはnohupコマンドを中断しないのですか?

#!/bin/bash 
cleanup(){ 
    echo "Caught SIGINT ..." 
    exit 1 

}  
trap 'cleanup' 3 
    while :;do 
     echo "a" 
     sleep 3 
    done 

test.shある

が、私は、スクリプトでnohup ./test.sh &を書く場合その名前は、go.sh)である、と私はgo.shを実行ファイル、そしてtest.shは殺す-3 PID信号

を私は書くことができますどのようにキャッチすることはできませんgo.shスクリプトを確認するtest.sh catch -3?

+0

シグナル「3」は「SIGQUIT」です。 'SIGINT'は' 2'です。 – jm666

答えて

1

kill -3SIGQUIT)は機能しません。 bashのマニュアルによると:bashが対話型の場合は、組み込み待つように

、任意のトラップが存在しない場合に、それは(kill 0が対話型シェルを殺さないように)SIGTERMを無視し、SIGINTは(キャッチされ処理されます割り込み可能です)。 すべての場合、bashはSIGQUITを無視します。ジョブ制御が有効な場合、bashはSIGTTIN,SIGTTOU、およびSIGTSTPを無視します。

関連する問題