- 시그널이란?
시그널은 커널에서 프로세스로 전달되는 한 단어
-동기 신호(Synchronous signals)
프로세스가 수행하는 작업에 의해 발생되는 신호( 예 : 0으로 나누기)
-비동기 신호(Asynchronous signals)
사용자가 인터럽트 키를 누르는 등 프로세스 외부의 이벤트로 인한 신호
- 시그널에 대해 프로세스가 무엇을 할 수 있는가?
프로세스는 3가지 선택이 가능하다.
Accept(기본)
signal (SIGINT, SIG_DFL);
Ignore(무시)
signal(SIGINT,SIG_IGN);
Call a function(함수 호출)
signal(signum, functionname);
signal |
목적 : 단순 시그널 핸들링 |
헤더 : #include <signal.h> |
사용법 : result = signal (int signum, void (*action)(int)) |
인자 : signum 시그널 종류 |
리턴값 : -1 에러 |
/* sigdemo1.c - 시그널 핸들러의 작동방식을 보여준다.
*/
#include <stdio.h>
#include <signal.h>
int main()
{
void f(int); //함수 선언
int i;
signal(SIGINT,f); //핸들러 함수 설정
for(i=0; i<5; i++){
printf("hello\n");
sleep(1);
}
}
void f(int signum) // 함수 호출
{
printf("OUCH!\n");
}
-실행결과
Ctrl+c 인터럽트 시 OUCH! 출력
-sigdemo1.c 작동원리
cf) SIGKILL과 SIGSTOP은 SIG_IGN 셋으로 무시할 수 없다.
- 터미널을 제어하는 프로그램을 작성하는 세 가지 측면
1. 드라이버의 속성과 연결 제어 방법을 연구해야 한다.
2. 애플리케이션의 특정 요구 사항을 살펴보고 해당 요구 사항에 맞게 드라이버 조정
3. 경우에 따라서는 필요없는 키가 들어왔을때 시그널 처리도 필요.