K 개발자
시그널의 개념 본문
시그널의 개념
시그널signal은 프로세스에 뭔가 발생했음을 알리는 간단한 메시지를 비동기적으로 보내는 것이다.
이 메시지는 무엇이 발생했는지를 표시하는 미리 정의된 상수를 사용한다.
시그널을 받은 프로세스는 시그널의 종류에 따라 적절한 처리 방법을 지정할 수 있다.
시그널의 발생
시그널은 소프트웨어 인터럽트software interrupt다.
시그널은 비동기적으로 발생하며, 유닉스 운영체제가 프로세스에 전달한다.
시그널 처리 방법
- 프로세스가 받은 시그널에 따라 기본 동작default action을 수행한다. 각 시그널에는 기본 동작이 지정되어 있다. 대부분 시그널의 기본 동작은 프로세스를 종료하는 것이다. 이외에 시그널을 무시하거나 프로세스의 수행 일시 중지suspend/재시작resume 등을 기본 동작으로 수행한다.
- 프로세스가 받은 시그널을 무시한다. 프로세스가 시그널을 무시하기로 지정하면 유닉스는 프로세스에 시그널을 전달하지 않는다.
- 프로세스는 시그널의 처리를 위해 미리 함수를 지정해놓고 시그널을 받으면 해당 함수를 호출해 처리한다. 시그널 처리를 위해 지정하는 함수를 시그널 핸들러signal handler라고 한다. 시그널을 받으면 기존 처리 작업을 중지한 후 시그널 핸들러를 호출하며, 시그널 핸들러의 동작이 완료되면 기존 처리 작업을 계속 수행한다.
- 프로세스는 특정 부분이 실행되는 동안 시그널이 발생하지 않도록 블록할 수 있다. 블록된 시그널은 큐에 쌓여 있다가 시그널 블록이 해제되면 전달된다.
시그널의 종류
시그널은 <signal.h> 파일에 정의되어 있다.
Comments