시그널
프로세스들 사이의 비동기적 사건의 발생을 전달.
종류
SIGKILL : 핸들러 못바꿈. 프로세스를 강제로 종료.
SIGSTOP : 핸들러 못바꿈. 프로세스를 SIGCONT가 올때까지 멈춤.
SIGHUP : 터미널 단절, 데몬 프로세스 재수행.
SIGABRT : abort함수의 호출.
SIGALRM : 설정된 타이머에 의해 발생.
SIGCHLD : 프로세스 종료시 부모 프로세스에게 전달.
SIGFPE : 산술 연산 에러
SIGILL : 잘못된 기계어 수행.
SIGTERM : kill명령에 의해 발생하는 종료 신호(default0
SIGTSTP : ^Z를 누르면 발생.
SIGUSR1, SIGUSR2 : 응용 프로그램에서 프로그래머가 정의하여 사용
시그널의 발생
pending bits : 시그널이 오면 해당 FLAG비트가 set
block mask : unblock될 때까지 지연된 상태로 남음. <-> unblock
시그널 처리
ignore : SIGKILL과 SIGSTOP을 제외하고 모든 시그널 무시.
catch : 미리 등록된 함수(handler)가 수행.
default : 특별한 처리 방법을 선택하지 않음. 프로세스를 종료.
#include<signal.h>
typedef void (*sighandler_t)(int); //int는 signo
sighandler_t signal(int signo, sighandler_t handler)(int);
지정한 시그널 번호(signo)를 handler로 배치.
signo : 시그널 번호
리턴 : 이전 시그널 핸들러의 값. 실패시 SIG_ERR
시그널 발생함수
#include<signal.h>
int kill(pid_t pid, int signo);
프로세스 (그룹)에게 signo의 시그널을 보낸다.
pid>0 : pid인 프로세스에게 시그널을 전달.
pid==0 : 호출한 프로세스와 같은 그룹인 모든 프로세스에게 시그널 전달.
pid<-1 : -pid인 프로세스 그룹 ID와 같은 그룹인 모든 프로세스에게 시그널 전달.
int raise(ing signo);
자기자신에게 signo의 시그널을 보낸다.
'컴퓨터 공부 > Advanced UNIX System Programming' 카테고리의 다른 글
[5월 8일 1교시] 입출력 다중화 1 (0) | 2009.05.08 |
---|---|
[5월 7일 3교시] 시그널 2 (0) | 2009.05.07 |
[5월 7일 1교시] 프로세스 관계 + 데몬 프로세스 (0) | 2009.05.07 |
[5월 6일 3교시] 시스템 정보 2 (0) | 2009.05.06 |
[5월 6일 2교시] 프로세스 제어 4 + 시스템 정보 1 (0) | 2009.05.06 |