Manpages

이 름

sigaction, sigprocmask, sigpending, sigsuspend − POSIX 시 그 널 처 리 함 수

사 용 법

#include <signal.h>

int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact);

int sigprocmask(int how, const sigset_t *set, sigset_t *oldset);

int sigpending(sigset_t *set);

int sigsuspend(const sigset_t *mask);

설 명

sigaction 시 스 템 호 출 은 특 정 시 그 널 이 수 신 되 었 을 때 , 프 로 세 스 가 취 할 액 션 을 변 경 하 는 데 사 용 된 다 .

signum 는 시 그 널 을 가 리 키 며 , SIGKILLSIGSTOP 를 제 외 한 모 든 시 그 널 값 이 될 수 있 다 .

act 가 null이 아 닐 때 , 시 그 널 signum 에 대 한 새 로 운 액 션 은 act 가 되 며 , oldact 이 null이 아 닐 때 , 기 존 의 액 션 은 oldact 에 저 장 된 다 .

sigaction 구 조 는 다 음 과 같 이 정 의 된 다 .

struct sigaction {
void (*sa_handler)(int);
void (*sa_sigaction)(int, siginfo_t *, void *);
sigset_t sa_mask;
int sa_flags;
void (*sa_restorer)(void);
}

아 키 텍 쳐 에 따 라 공 용 체 로 되 어 있 기 도 하 므 로 , sa_handlersa_sigaction 을 모 두 지 정 하 지 말 라 .

sa_restorer 요 소 는 쓰 이 지 않 으 며 , 사 용 되 어 서 는 안 된 다 . POSIX는 sa_restorer 요 소 를 갖 지 않 는 다 .

sa_handlersignum 시 그 널 이 오 면 실 행 되 는 액 션 을 명 시 하 며 , 디 폴 트 액 션 을 취 하 라 는 SIG_DFL , 시 그 널 을 무 시 하 라 는 SIG_IGN , 시 그 널 을 처 리 하 는 특 정 함 수 에 대 한 포 인 터 중 의 하 나 가 될 수 있 다 . 세 번 째 의 경 우 시 그 널 처 리 함 수 는 시 그 널 번 호 만 을 유 일 한 인 수 로 갖 는 다 .

sa_sigaction 또 한 signum 시 그 널 과 연 결 된 액 션 을 명 시 한 다 . 처 리 함 수 는 시 그 널 번 호 를 첫 번 째 인 수 로 , siginfo_t 에 대 한 포 인 터 를 두 번 째 인 수 로 , 그 리 고 void형 포 인 터 로 캐 스 트 된 ucontext_t 에 대 한 포 인 터 를 세 번 째 인 수 로 갖 는 다 .

sa_mask 는 시 그 널 핸 들 러 의 실 행 동 안 블 록 화 되 어 야 하 는 시 그 널 의 마 스 크 를 제 공 한 다 . 또 한 , SA_NODEFER 또 는 SA_NOMASK 이 사 용 되 지 않 으 면 , 핸 들 러 를 시 동 시 켰 던 그 시 그 널 도 블 록 화 된 다 .

sa_flags 는 시 그 널 처 리 프 로 세 스 의 행 위 를 변 경 시 키 는 일 련 의 플 래 그 들 을 명 시 한 다 . 이 는 bitwise 혹 은 플 래 그 는 아 래 플 래 그 들 의 0개 이 상 의 OR 비 트 연 산 으 로 만 들 어 진 다 .

SA_NOCLDSTOP

signumSIGCHLD 이 면 자 식 프 로 세 스 가 중 지 되 어 도 통 지 를 받 지 않 는 다 . (즉 , 자 식 프 로 세 스 들 이 SIGSTOP, SIGTSTP, SIGTTIN , SIGTTOU 중 하 나 를 수 신 할 때 )

SA_ONESHOT 또 는 SA_RESETHAND

시 그 널 처 리 기 가 호 출 되 어 한 번 실 행 된 후 , 시 그 널 액 션 을 원 래 의 디 폴 트 액 션 으 로 되 돌 려 놓 는 다 . (이 는 signal(2) 호 출 에 대 한 기 본 행 위 이 다 .)

SA_RESTART

일 부 시 스 템 호 출 들 이 시 그 널 을 통 해 재 시 작 할 수 있 도 록 함 으 로 서 BSD 시 그 널 과 의 호 환 성 을 제 공 한 다 .

SA_NOMASK or SA_NODEFER

어 떤 시 그 널 처 리 기 의 동 작 동 안 그 시 그 널 자 신 을 막 지 않 는 다 .

SA_SIGINFO

시 그 널 처 리 기 가 한 개 가 아 닌 3개 의 인 수 를 취 한 다 . 이 경 우 , sa_handler 대 신 에 sa_sigaction 이 설 정 되 어 야 한 다 . (sa_sigaction 필 드 는 리 눅 스 2.1.86에 서 추 가 되 었 다 .)

sa_sigactionsiginfo_t 변 수 는 다 음 의 요 소 들 을 갖 는 구 조 체 (struct)이 다 .

siginfo_t {

int

si_signo;

/* 시 그 널 넘 버 */

int

si_errno;

/* errno 값 */

int

si_code;

/* 시 그 널 코 드 */

pid_t

si_pid;

/* 프 로 세 스 ID 보 내 기 */

uid_t

si_uid;

/* 프 로 세 스 를 전 송 하 는 실 제 사 용 자 ID */

int

si_status;

/* Exit 값 또 는 시 그 널 */

clock_t

si_utime;

/* 소 모 된 사 용 자 시 간 */

clock_t

si_stime;

/* 소 모 된 시 스 템 시 간 */

sigval_t

si_value;

/* 시 그 널 값 */

int

si_int;

/* POSIX.1b 시 그 널 */

void *

si_ptr;

/* POSIX.1b 시 그 널 */

void *

si_addr;

/* 실 패 를 초 래 한 메 모 리 위 치 */

int

si_band;

/* 밴 드 이 벤 트 */

int

si_fd;

/* 파 일 기 술 자 */

}

si_signo, si_errno 그 리 고 si_code 는 모 든 시 그 널 에 대 해 정 의 되 었 다 . kill(2), POSIX.1b 시 그 널 과 SIGCHLD은 si_pidsi_uid 을 채 운 다 . SIGCHLD 은 또 한 si_status, si_utime, si_stime 을 채 운 다 . si_int 그 리 고 si_ptr 는 POSIX.1b 시 그 널 의 송 신 자 에 의 해 명 시 된 다 . 좀 더 자 세 한 사 항 을 보 려 면 , sigqueue(2) 을 참 조 하 라 . SIGILL, SIGFPE, SIGSEGV 그 리 고 SIGBUS은 si_addr 를 오 류 의 주 소 로 채 운 다 . SIGPOLL 은 si_bandsi_fd 를 채 운 다 . si_code 는 왜 시 그 널 이 보 내 졌 는 지 에 대 해 지 시 한 다 . 이 는 bitmask가 아 닌 값 이 다 . 나 올 수 있 는 모 든 시 그 널 값 은 이 테 이 블 에 나 열 되 어 있 다 .

sigprocmask 호 출 은 현 재 블 록 화 된 시 그 널 들 을 변 경 시 키 는 데 사 용 된 다 . 호 출 은 지 정 된 how 값 에 따 라 다 르 게 동 작 한 다 .

SIG_BLOCK

set 인 수 가 지 정 한 시 그 널 집 합 이 블 록 시 킬 시 그 널 집 합 에 더 해 진 다 .

SIG_UNBLOCK

set 에 포 함 된 시 그 널 들 이 블 록 시 킬 시 그 널 들 의 집 합 에 서 삭 제 된 다 . 블 록 하 고 있 지 않 은 시 그 널 을 삭 제 하 려 해 도 괜 찮 다 .

SIG_SETMASK

블 록 화 할 시 그 널 집 합 을 set 으 로 설 정 한 다 .

oldset 이 null이 아 닐 때 , 기 존 의 마 스 크 시 그 널 집 합 은 oldset 에 저 장 된 다 .

sigpending 호 출 은 블 록 화 에 막 혀 기 다 리 고 있 는 시 그 널 을 살 펴 볼 수 있 도 록 해 준 다 . 기 다 리 는 시 그 널 들 의 시 그 널 마 스 크 는 set 내 에 저 장 된 다 .

sigsuspend 호 출 은 프 로 세 스 가 막 고 있 는 시 그 널 마 스 크 를 지 정 한 mask 로 잠 시 대 체 하 고 , 다 음 시 그 널 이 수 신 될 때 까 지 프 로 세 스 를 중 지 시 킨 다 .

반 환 값

sigaction , sigprocmask , sigpending 는 성 공 하 면 0을 실 패 하 면 -1을 리 턴 한 다 . sigsuspend 항 상 -1을 리 턴 한 다 . 보 통 에 러 EINTR 과 함 께 .

에 러

EINVAL

지 정 한 시 그 널 이 부 적 절 하 다 . 혹 은 받 을 수 없 는 SIGKILL 또 는 SIGSTOP 에 대 한 액 션 을 변 경 하 려 고 했 다 .

EFAULT

act, oldact, set 또 는 oldset 이 프 로 세 스 의 메 모 리 영 역 이 아 닌 곳 을 가 리 키 고 있 다 .

EINTR

시 스 템 호 출 이 인 터 럽 트 되 었 다 .

주 의

sigprocmask 호 출 로 SIGKILL 또 는 SIGSTOP 을 블 록 화 할 수 없 다 . 이 런 명 령 은 무 시 된 다 .

POSIX에 따 르 면 , 프 로 세 스 가 kill() 또 는 raise() 함 수 가 만 들 어 낸 것 이 아 닌 GFPE, SIGILL, 혹 은 SIGSEGV를 무 시 한 이 후 의 프 로 세 스 의 동 작 은 정 의 되 지 않 는 다 . 정 수 를 0으 로 나 눈 결 과 또 한 정 의 되 지 않 는 다 . 일 부 아 키 텍 쳐 에 선 0으 로 나 누 기 가 SIGFPE 시 그 널 을 만 들 어 낼 것 이 다 . (또 한 가 장 큰 음 의 정 수 를 −1로 나 누 어 도 SIGFPE를 생 성 할 수 있 다 .) 이 시 그 널 을 무 시 하 면 무 한 루 프 를 초 래 할 수 있 다 .

POSIX 스 펙 은 오 직 SA_NOCLDSTOP 만 을 정 의 한 다 . 다 른 sa_flags 의 사 용 은 이 식 이 불 가 능 하 다 .

SA_RESETHAND 플 래 그 는 동 일 한 이 름 의 SVr4 플 래 그 와 호 환 가 능 하 다 .

SA_NODEFER 플 래 그 는 커 널 1.3.9과 새 로 운 버 전 하 에 서 동 일 한 이 름 의 SVr4 플 래 그 와 호 환 가 능 하 다 .

SVr4 호 환 성 을 위 한 SA_RESETHANDSA_NODEFER 이 름 들 은 오 직 라 이 브 러 리 버 전 3.0.9 그 리 고 그 이 후 의 버 전 에 서 만 존 재 한 다 .

SA_SIGINFO 플 래 그 는 POSIX.1b에 의 해 서 만 명 시 된 다 . 이 에 대 한 지 원 은 리 눅 스 2.2에 추 가 되 었 다 .

sigaction 현 재 시 그 널 처 리 기 에 쿼 리 를 하 기 위 해 널 두 번 째 인 수 로 호 출 될 수 있 다 . 이 를 널 두 번 째 그 리 고 세 번 째 인 수 들 로 이 를 호 출 함 으 로 서 현 재 머 신 에 대 한 주 어 진 시 그 널 이 타 당 한 가 를 체 크 하 는 데 사 용 될 수 있 다 .

시 그 널 체 계 조 작 에 대 한 자 세 한 정 보 를 얻 으 려 면 , sigsetops(3) 을 참 조 하 라 .

호 환

POSIX, SVr4. SVr4 는 EINTR 조 건 에 대 한 문 서 를 제 공 하 지 않 는 다 .

관 련 항 목

kill(1), kill(2), killpg(2), pause(2), raise(3), siginterrupt(3), signal(2), signal(7), sigsetops(3), sigvec(2)

번 역

ASPLINUX <man [AT] asp-linux.kr> 2000년 7월 29일
한 글 Manpage 프 로 젝 트 (http://man.kldp.org) 2005년 2월 13일