리눅스마스터1급: ANSI C 시그널 처리
작성자 정보
- 관리자 작성
- 작성일
컨텐츠 정보
- 2,263 조회
- 0 추천
- 목록
본문
리눅스마스터1급: ANSI C 시그널 처리
signal
ANSI C 시그널을 처리한다.
1) 개요
|
|
|
| #!include <signal.h> void (*signal(int signum, void (*handler)(int)))(int); |
|
|
|
|
2) 설명
signal 시스템 콜은 signum 번호의 시그널에 대해 새로운 시그널 핸들러를 설치한다.
시그널 핸들러는 handler로 설정되고, 사용자 정의 함수이거나 다음 중 하나가 될 수 있다.
∙SIG_IGN : 시그널을 무시한다.
∙SIG_DFL : 시그널의 초기 기본 동작을 하도록 한다.
시그널 핸들러 루틴에 넘겨지는 정수 인자는 시그널 번호이다.
이는 여러 시그널에 대해 하나의 시그널 핸들러를 사용할 수 있게 한다.
∙반환 값 : signal은 이전의 시그널 핸들러의 포인터나 에러시 SIG_ERR을 리턴한다.
POSIX에 따르면 kill()나 raise() 함수로 발생시킬 수 없는 SIGFPE, SIGILL 또는 SIGSEGV 시그널을 무시한 후 프로세스의 동작을 알 수 없다.
0으로 나눠진 정수는 알 수 없는 결과를 낸다.
어떤 아키텍처에서는 SIGFPE 시그널이 발생한다(-1로 음의 정수를 나누는 것도 SIGFPE를 발생시킨다). 이 시그널을 무시하면 무한 루프에 빠질 수도 있다.
POSIX(B.3.3.1.3)에 따르면 SIGCHLD에 대한 동작은 SIG_IGN으로 설정해서는 안 된다.
여기서 BSD와 SYSV가 다르다.
SIGCHLD의 동작을 SIG_IGN으로 설정하는 BSD 소프트웨어는 리눅스에서는 실패한다.
관련자료
-
이전
-
다음