본문
쉘스크립트에서 tcpdump를 실행시키고.....
사용자가 Ctrl + C 로 tcpdump를 중지하면..
그때까지의 결과를 저장하고 프로그램을 종료하는 간단한 스크립트를 작성해야했다.
하지만 사용자가 Ctrl + C를 누르게 되면.....tcpdump가 종료되는 동시에
그 시그널이 shell까지 전달되어 쉘스크립트까지 멈추는 현상이 발생하였다.
이를 해결하기 위해 찾아낸 것이 trap이라는 명령어이다..
단, 이 trap라는 명령어는 bash shell의 내부명령어로 다른 쉘을 사용할 경우에는 사용할 수 없다.
trap의 사용방법은
# trap '실행하고자하는 명령어' 시그널번호
이다... 스크립트 안에서만 사용할 수 있는 것이 아니라
너무나도 당연히 command line에서도 사용할 수 있다.
[dev@bamboo dev]$ trap 'ls -l' INT
[dev@bamboo dev]$ '여기에서 Ctrl+C'를 입력해본다.total 1458240
-rw-rw-r-- 1 dev users 5184 Oct 27 2006 !
drwxrwxr-x 3 dev users 4096 Jan 22 09:53 0122
-rw-r--r-- 1 dev users 699612 May 25 10:13 070226_av.avi
-r-xr-xr-x 1 dev users 20319 Jan 11 2007 0_name.gram.class
-rw-rw-r-- 1 dev users 1034240 Jun 5 14:09 1234.cap
-rw-r--r-- 1 dev users 7375 Dec 12 2003 문서1.htm
-rw-r--r-- 1 dev users 4176 Apr 1 2006 324M_CONFIG.ini
-rw-rw-r-- 1 dev users 112282760 Mar 11 2005 500000_rx.txt
-rw-rw-r-- 1 dev users 112274003 Mar 11 2005 500000_tx.txt
# trap 'ls -l' INT
라고 명령을 내리게 되면... 바로 리턴되게 된다.
대신 INT시그널이 들어오게 되면 ls -l 이라는 명령어가 실행되도록
shell이 기억하게 된다.
그 이후 Ctrl+C(INT)가 입력되면 당연히 ls -l 명령이 실행되게 된다.
trap을 통해 INT시그널을 가로채게 되면
위에서 언급했던 문제가 해결된다.(tcpdump와 스크립트가 함께 종료되는 현상)
# trap '' INT 를 통해 해당 시그널을 무시하면 스크립트 다음 줄이 실행된다.ㅎ
------------------------------------------------------------------------
시그널의 종류는 아래와 같이
# kill -l
명령을 통해서 알수 있다.
[dino@thedino-~]$ kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL
5) SIGTRAP 6) SIGABRT 7) SIGEMT 8) SIGFPE
9) SIGKILL 10) SIGBUS 11) SIGSEGV 12) SIGSYS
13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGURG
17) SIGSTOP 18) SIGTSTP 19) SIGCONT 20) SIGCHLD
21) SIGTTIN 22) SIGTTOU 23) SIGIO 24) SIGXCPU
25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH
29) SIGLOST 30) SIGUSR1 31) SIGUSR2 32) SIGRTMAX
[dino@thedino-~]$
참고자료 :
http://kldp.org/HOWTO/html/Adv-Bash-Scr-HOWTO/debugging.html
'컴퓨터 이야기' 카테고리의 다른 글
[ Tip ] watch를 사용하여 주기적으로 명령어 실행하기. (1) | 2007.09.03 |
---|---|
[Tip] vi에서 자신이 typedef한 type을 하이라이팅하기~! (2) | 2007.07.23 |
[WinpCap] winpcap 예제..basic_dump.c 분석~!// (25) | 2007.06.24 |
노트북에 cygwin을 깔아는데..... (2) | 2007.06.20 |
[?] Dell에서 윈도우 대신 우분투를 기본으로 판매할 때 가격은?.. (0) | 2007.06.11 |