Programming/Bash Shell Script

[Bash Shell Script] 쉘 스크립트 trap 명령어를 이용한 시그널 제어

Nirsa 2019. 12. 17. 22:17
반응형

 

Bash Shell Script 에서 리눅스의 *시그널을 제어하는 방법 입니다.

 

* 시그널 이란?

간단히 말하자면 특정 이벤트가 발생 했을때 신호를 보내 알려주는걸 뜻 합니다.

 

대표적인 예로 리눅스의 Ctrl+C , Ctrl+Z 를 눌러서 프로그램을 종료 또는 중지를 한다던가, 윈도우에서 Alt+F4 를 눌러서 종료한 적이 있을텐데, 이렇게 특정 입력이 들어 올 때 인터럽트가 발생하여 프로그램을 제어하게 됩니다.

 

리눅스의 시그널은 아래 표를 참고해주세요.

 1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL       5) SIGTRAP

6) SIGABRT      7) SIGBUS       8) SIGFPE       9) SIGKILL     10) SIGUSR1

11) SIGSEGV     12) SIGUSR2     13) SIGPIPE     14) SIGALRM     15) SIGTERM

16) SIGSTKFLT   17) SIGCHLD     18) SIGCONT     19) SIGSTOP     20) SIGTSTP

21) SIGTTIN     22) SIGTTOU     23) SIGURG      24) SIGXCPU     25) SIGXFSZ

26) SIGVTALRM   27) SIGPROF     28) SIGWINCH    29) SIGIO       30) SIGPWR

31) SIGSYS      34) SIGRTMIN    35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3

38) SIGRTMIN+4  39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8

43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13

48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12

53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7

58) SIGRTMAX-6  59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2

63) SIGRTMAX-1  64) SIGRTMAX

 

trap 명령어를 이용하여 배쉬 쉘 스크립트에서 시그널을 중간에 가로채서, 시그널에 해당하는 행동을 하지 못하게 막을 수 있습니다. 보통 스크립트를 제작한 후, 이 스크립트가 실행되는 도중에 Ctrl+C를 입력받지 않도록 할 경우에 사용 됩니다

 

우선, Ctrl+C를 재대로 막는지 확인하기 위해 간단한 무한루프 스크립트를 입력하도록 합시다.

 

코드

#!/bin/bash

while true;
do
        echo "Infinite loop!!"
        sleep 3
done

실행 결과

 

위 코드를 입력하고 실행하게 되면 3초마다 "Infinite loop!!" 가 출력되며 무한루프로 동작하기 때문에 아무리 기다려도 스크립트가 종료되지 않습니다. Ctrl+C를 누른 후 빠져나와 주세요.

 

그럼 이번에도 아래 코드를 입력 후 실행한 뒤 Ctrl+C를 눌러봅시다.

 

코드

#!/bin/bash

trap "echo 'Failed'" SIGINT

while true;
do
        echo "Infinite loop!!"
        sleep 3
done

실행 결과

 

이번엔 Ctrl+C를 눌렀더니 Failed 가 출력됩니다.

trap "echo 'Failed'" SIGINT 로 Ctrl+C의 시그널인 SIGINT가 재대로 동작되지 않게 설정 해보았습니다.

 

위와 같이 스크립트 내에서 trap 명령어를 이용하여 시그널의 동작을 제어할 수 있습니다.

 

* Ctrl+C 로 못빠져 나오시는 분들은 Ctrl+Z 눌러서 중지시킨 후 아래 이미지를 따라하여 종료 시키시면 됩니다.

 

 

반응형