min's devlog
Signal 처리 본문
Signal 처리
시그널?
-프로세스에서 어떤 이벤트가 발생한 것을 다른 프로세스에게 알리는 도구
-소프트웨어 인터럽트 라고도 한다. (잠깐 멈추게 할 수 있기 때문에)
-주로 운영체제가 일반 프로세스에게 보낸다.
유닉스의 시그널 이름은 SIG로 시작한다. 자세한 내용은 signal.h 파일에 명시되어있다.
리눅스는 환경이 다 다르다.
<bits/signum.h> 에 정의되어있었다.
시그널 종류와 발생 조건
시그널 | 발생조건 |
SIGINT | 인터럽트키(CTRL-c)를 입력했을 때 |
SIGKILL | 강제종료 시그널로 프로세스가 이 시그널을 무시/블록할 수 없음 |
SIGIO | 비동기 입출력이 발생했을 때 |
SIGPIPE | 닫힌 파이프나 소켓에 데이터 쓰기/읽기를 시도할 때 |
SIGCHLD | 자식 프로세스가 종료되거나 취소될 때 부모프로세스에 전달 |
SIGPWR | 전원 중단 및 재시작 시에 init 프로세스로 전달 |
SIGSTOP | 키보드에서 중지키(CTRL-z)를 눌렀을 때 |
SIGSYS | 잘못된 시스템 호출 시 발생 |
SIGURG | 긴급한 데이터 수신 |
SIGUSR1,2 | 사용자 목적으로 사용할 수 있는 시그널 |
abort() : 비정상적으로 프로세스 종료될 때 발생하는 것
시그널 | 발생조건 |
SIGHUP | 터미널과 연결이 끊어졌을 때 발생 |
SIGQUIT | 종료키(CTRL-/)를 눌렀을 때 |
SIGILL | 프로세스가 규칙에 어긋날 명령을 수행하려고 할 때 |
SIGTRAP | 특정 디버깅 지점에 도달할 때 발생 |
SIGABRT | abort() 함수를 호출할 때 발생 |
SIGFPE | 숫자를 0으로 나누거나 연산 에러시 발생 |
SIGALARM | alarm() 함수에 지정한 시간 종료시 |
SIGVTALRM | setitimer() 함수에 의한 가상타이머 시간 만료를 알리는 시그널 |
시그널 발생
int kill(pid_t pid, int sig); //kill은 프로세스에게 signal을 전달하는 함수
//pid가 pid인 프로세스에게 sig를 전달
int raise(int sig); //calling 프로세스 또는 calling 스레드에게 시그널 전달
시그널 처리
- 각 시그널에 따라 처리할 동작이 정해져있다.
- 어떤 시그널의 기본동작에는 단순히 다른 시그널을 무시(discard)하는 것도 있다.
- 보통 시그널 수신시에 수행하는 동작은 프로세스 종료 또는 시그널 무시
'Linux > TCP IP Socket Programming' 카테고리의 다른 글
Signal handler 코드 (0) | 2021.04.04 |
---|---|
Signal Handler (0) | 2021.04.04 |
SO_RCVBUF 옵션 (0) | 2021.04.04 |
멀티캐스트 프로그래밍 (0) | 2021.03.28 |
소켓 옵션 종류(2) (0) | 2021.03.28 |
Comments