셸 에서 trap 이 신 호 를 포착 하 는 처리
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!!!
$
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
ZSH에서 물고기까지ZSH는 수년 동안 내 기본 셸이었습니다. 이제 몇 달 동안 사용하면서 ZSH 구성에 대해 몇 가지 사항을 발견했습니다. 우리는 을 제공하는 시스템과 더 빨리 상호 작용하는 경향이 있습니다. 내.zshrc 구성에는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.