2017-01-01 11 views
0

トラップスリープループを実行しようとすると、奇妙な問題が発生しています。bashのシグナルトラッピングはRHEL7では一度しか動作しません(Ubuntuではありません)

具体的には、以下のコード:

saysomething() { 
    trap saysomething 37 
    echo "Hello there" 
    while true; do 
     sleep 1 
    done 
} 

echo "Current pid: $$" 
saysomething 

プリント「こんにちは」私はそれを送信毎回のUbuntu 14.04にkill -37 <pid>を使用して別のシェルからの信号。

ただし、RHEL 7マシンでは、上記のように初めてHello thereが印刷されます。その後、スクリプトは実行を続けますが、それ以上の信号には応答しません。

この違いの原因は何ですか?

+0

申し訳ありません。あまりにも速く読む。おそらくあなたは関数の外側からそれを行うことができます。 –

+1

両方のマシンで同じバージョンの 'bash'を使用していますか? – chepner

+0

いいえ、 'bash'のバージョンが異なっているようです。 Ubuntuでは4.3.11、RHEL 7では4.2.46となっています。 – balajeerc

答えて

0

そうでもない答えが、これは私が回避策として、以下を使用して終了回避策です:

#!/usr/bin/env bash 

flag=false 

saysomething() { 
    flag=true 
    trap reset 37 
    echo "Hello there" 
    while [[ $flag == true ]]; do 
     sleep 1 
    done 
    saysomething 
} 

reset() { 
    flag=false 
} 

echo "Current pid: $$" 

saysomething 

私はまだかかわらず、行動のこの違いの理由を説明することはできません。

関連する問題