셸 에서 trap 이 신 호 를 포착 하 는 처리

http://www.kuaiwenba.com/
1.trap 에서 신 호 를 포착 한 후에 세 가지 반응 방식 이 있 습 니 다.(1)이 신 호 를 처리 하 는 프로그램 을 실행 합 니 다(2)신 호 를 받 는 기본 동작(3)은 이 신 호 를 무시 합 니 다.trap 은 상기 세 가지 방식 에 세 가지 기본 형식 을 제공 합 니 다.첫 번 째 형식의 trap 명령 은 셸 에서 signal list 목록 에서 수치 가 같은 신 호 를 받 았 을 때따옴표 의 명령 문자열 을 실행 합 니 다.trap'commands'signal-list trap'commands'signal-list 는 신호 의 기본 동작 을 회복 하기 위해 두 번 째 형식의 trap 명령 을 사용 합 니 다.trap signal-list 세 번 째 형식의 trap 명령 은 신호 trap'signal-list'를 무시 할 수 있 습 니 다.
 
 
메모:(1)신호 11(세그먼트 위반)은 포착 할 수 없습니다.셸 자체 가 이 신 호 를 포착 하여 메모리 의 덤 프 를 해 야 하기 때 문 입 니 다.(2)trap 에서 신호 0 에 대한 처 리 를 정의 할 수 있 습 니 다.셸 프로그램 은 종료(예 를 들 어 exit 문 구 를 실행)할 때 이 신 호 를 보 냅 니 다.(3)signal-list 에서 지정 한 신 호 를 포착 하고 해당 하 는 명령 을 수행 한 후 이 명령 들 이 셸 프로그램 을 종료 하지 않 으 면 셸 프로그램 은 신 호 를 받 았 을 때 실행 하 는 명령 뒤의 명령 을 계속 수행 하여 셸 프로그램 이 종료 되 지 않 기 쉽다.또한,trap 구문 에 서 는 작은 따옴표 와 작은 따옴표 가 다 릅 니 다.셸 프로그램 이 trap 문 구 를 처음 만 났 을 때 commands 의 명령 을 한 번 스 캔 합 니 다.이때 commands 가 작은 따옴표 로 묶 여 있 으 면 셸 은 commands 의 변수 와 명령 을 바 꾸 지 않 습 니 다.그렇지 않 으 면 commands 의 변수 와 명령 은 그 당시 의 구체 적 인 값 을 사용 합 니 다.
 
kill-l 시스템 신 호 를 표시 할 수 있 습 니 다.
일반적으로 우리 가 무시 해 야 할 신 호 는 네 가지 가 있다.즉,HUP,INT,QUIT,TSTP,즉 신호 1,2,3,24 이다.  이러한 문 구 를 사용 하면 인 터 럽 트 신 호 를 무시 할 수 있 습 니 다.  trap""1,2,3,24 또는 trap"HUP INT QUIT TSTP  trap:1,2,3,24 또는 trap HUP INT QUIT TSTP 로 기본 값 을 되 돌려 줍 니 다.  stty-a 로 인 터 럽 트 신호 와 키보드 의 대응 을 표시 하고 위의 명령 을 각각 실행 한 후 실행 할 수 있 습 니 다.  tail-f/etc/passwd,그리고 키보드 로 중단 하려 고 시도 합 니 다.두 가지 상황(기본 값 과 무시)에서 어떻게 다른 지 시험 해 보 세 요.  더 편리 한 것 은 셸 에서 trap 으로 우리 자신의 신호 처리 프로그램 을 정의 할 수 있다 는 것 이다.
  
#!/bin/bash
#scriptname: trapping
#can use the singnal numbers of bash abbreviations seen
#below. Cannot use SIGINT ,SIGOUIT ,etc
trap 'echo Control-c will not terminate $0. ' INT
trap 'echo Control-\ will not terminate $0. ' QUIT
trap 'echo Control-Z will not terminate $0. ' TSTP
echo "Enter any string after the prompt. When you are ready to exit ,type \"stop\"."
while true
do
echo -n "Go ahead ...>"
read
if [[ $reply==[sS]top ]]
then
   break
fi
done
------------------------------------------
명칭.          기본 동작            설명 하 다.
SIGHUP 프로 세 스 종료    단말 회선 차단
SIGINT  프로 세 스 종료    인 터 럽 트 프로 세 스
SIGQUIT 는 CORE 파일 을 만들어 프로 세 스 를 종료 하고 코어 파일 을 생 성 합 니 다.
SIGILL  CORE 파일 만 들 기        불법 명령
SIGTRAP CORE 파일 만 들 기        추적 자폭
SIGBUS  CORE 파일 만 들 기        버스 오류
SIGSEGV CORE 파일 만 들 기        세그먼트 불법 오류
SIGFPE  CORE 파일 만 들 기        부동 소수점 이상
SIGIOT  CORE 파일 만 들 기        실행 I/O 자동 함몰
SIGKILL 프로 세 스 종료    프로 세 스 죽 이기
SIGPIPE 종료 프로 세 스    읽 기 프로 세 스 가 없 는 파이프 에 데 이 터 를 쓰기
SIGALARM        프로 세 스 종료    타이머
SIGTERM 프로 세 스 종료    소프트웨어 종료 신호
SIGSTOP 프로 세 스 정지    비 단말기 정지 신호
SIGTSTP 프로 세 스 정지    단말 정지 신호
SIGCONT 신호 무시    정 지 된 프로 세 스 를 계속 실행 합 니 다.
SIGURG  무시 신호    I/O 긴급 신호
SIGIO   무시 신호    설명자 에서 I/O 를 진행 할 수 있 습 니 다.
SIGCHLD 신호 무시    하위 프로 세 스 가 정지 되 거나 종료 되 었 을 때 부모 프로 세 스 에 알 립 니 다.
SIGTOU 프로 세 스 정지    백그라운드 프로 세 스 쓰기 터미널
SIGTTIN 프로 세 스 정지    백 엔 드 프로 세 스 읽 기 터미널
SIGXGPU 프로 세 스 종료    CPU 시한 초과
SIGXFSZ 프로 세 스 종료    파일 길이 가 너무 깁 니 다.
SIGWINCH        무시 신호    창 크기 변경
SIGPROF 종료 프로 세 스    통계 분포 도 는 타이머 로 때 가 된다.
SIGUSR 1 프로 세 스 종료    사용자 정의 신호 1
SIGUSR 2 프로 세 스 종료    사용자 정의 신호 2
SIGVTALRM       프로 세 스 종료    가상 타이머
Bash 에서 신 호 를 호출 하 는 방법 은:
코드:

      
      
      
      
trap command/function sig1 sig2 ...

예컨대
코드:

      
      
      
      
trap "echo 'You hit ctrl+C!'" SIGINT while true; do   sleep 60 done

현재 이 스 크 립 트 를 실행 합 니 다.ctrl+C 를 누 르 면 스 크 립 트 가 동작 에 응답 합 니 다.
또한 Bash 에는 두 개의 위조 신호 가 있다.
코드:

      
      
      
      
EXIT shell DEBUG shell

trap 'echo "you fool, dont press ctr+c again!!!";sleep 10;exit' 2;
 
echo 앞의''기 호 는 작은 따옴표 이다.
 
예:
 
while true; do echo test; trap 'echo nonono; echo "you fool, dont press ctr+c again!!!";sleep 10;exit' 2; done
 
실행 결과 끝 N 줄:
 
test
test
test
test
test
test
test
test
test
test
test
test
tetest
test
test
nonono
you fool, dont press ctr+c again!!!
$

좋은 웹페이지 즐겨찾기