トラップが時々信号を無視するのはなぜですか?

トラップが時々信号を無視するのはなぜですか?

次のスクリプトがあります

#! /usr/bin/bash
trap "{ echo bye ;}" SIGINT


while :
do 
                echo "Hello"
done

Ctrl- を押すと、Cwhileループは停止せず、echo bye実行されません。

次のような場合でも同じことが起こります。

#! /usr/bin/bash
trap "{ echo bye ;}" SIGINT


while echo -n ""
do 
                echo "Hello"
done

SIGINTトラップがシグナルを無視するのはなぜですか?

ベストアンサー1

実行されますが、echo bye表示できません。これをwhileループに追加すると表示さsleep 0.5れます。

trapCtrl / Cを使用したため、whileループは停止しません。コードを終了するには、exit次のコマンドを追加する必要があります。trap

#!/bin/bash
#
gotcha()
{
    echo "Bye"
    exit 1
}

trap gotcha SIGINT

while :
do 
    echo "Hello"
    sleep 0.5
done

この機能について知っておくべき重要なことの1つtrapは、スクリプトの現在のコマンド(それが何であれ)が実行を完了するまで実行されないことです。したがって、長期実行コマンドを中断するために必ず使用する必要はありません。

おすすめ記事