트랩이 때때로 신호를 무시하는 이유는 무엇입니까?

트랩이 때때로 신호를 무시하는 이유는 무엇입니까?

다음 스크립트가 있습니다

#! /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

이 기능에 대해 알아야 할 매우 중요한 점 중 하나 trap는 스크립트의 현재 명령(그것이 무엇이든)이 실행을 완료할 때까지 실행되지 않는다는 것입니다. 따라서 장기 실행 명령을 중단하는 데 반드시 이를 사용할 필요는 없습니다.

관련 정보