Rechercher une page de manuel
sigaction
Langue: ko
Version: 8 May 1999 (fedora - 25/11/07)
Section: 2 (Appels système)
이름
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);
설명
The sigaction 시스템 호출은 특정 시그널의 수신 상에서 프로세스에 의해 취해진 액션을 변경하는데 사용된다.signum 는 시그널을 명시하고, SIGKILL 그리고 SIGSTOP을제외하고는타당한시그널이될수있다.
만일 act 이 -null이 아니라면 시그널.I signum에 대한 새로운 액션은 .IR act에서 설치된다. 만일 oldact 이 -null이 아니라면, 이전의 액션은 .IR 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_restorer 요소는 안 쓰이는 것이어서, 사용되어서는 안된다. POSIX는 .I sa_restorer요소를 명시할 수 없다.
sa_handler 는 .I signum와 관련된 액션을 명시하고, 디폴트 액션에 대해 이 시그널을 무시하기 위한 SIG_DFL 또는 SIG_IGN 이거나, 시그널 처리 함수에 대한 지시자가 될 수 있다.
sa_mask gives a mask of signals which should be blocked during execution of the signal handler. In addition, the signal which triggered the handler will be blocked, unless the 는 시그널 처리기의 실행 동안 블록화되어야 하는 시그널의 마스크를 제공한다. 게다가, .B SA_NODEFER 또는 SA_NOMASK이 사용되지 않으면, 핸들러를 시동시키는 시그널은 블록화된다.
sa_flags 는 시그널 처리 프로세스의 행위를 수정하는 일련의 플래그들을 명시한다. 이는 bitwise 혹은 zero 혹은 다음 중 그 이상의 것들에 의해 형성된다.
-
- SA_NOCLDSTOP
- 만일 signum SIGCHLD, 이 자식 프로세스가 중지되었을때, 이 통고를 수신하지 못하면,
(예를 들어, 자식 프로세스들이 SIGSTOP, SIGTSTP, SIGTTIN 또는 SIGTTOU을수신할때) - SA_ONESHOT 또는 SA_RESETHAND
- 일단 시그널 처리기가 호출되면, 디폴트 상태에 대한 시그널 액션을 재저장한다. (이는 .BR signal (2) 호출에 대한 기본 행위이다.)
- SA_RESTART
- 일부 시스템 호출들이 시그널을 통해 재시작할 수 있도록 함으로서 BSD 시그널 의미와 호환되는 행위를 제공한다.
- SA_NOMASK or SA_NODEFER
- 시그널이 자체 시그널 처리기로부터 수신받지 않도록 한다.
- SA_SIGINFO
- The signal handler takes 3 arguments, not one. In this case, should be set instead of 시그널 처리기는 하나가 아닌, 3개의 인수를 취한다. 이 경우, sa_handler대신에.Isa_sigaction이설정되어야한다. (sa_sigaction 필드는 리눅스 2.1.86에서 추가되었다.)
sa_sigaction에 대한 .I siginfo_t 변수는 다음의 요소들을 지닌 구조체(struct)이다.
-
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_code | |||
Value:Signal origin | |||
SI_USER:kill, sigsend or raise | |||
SI_KERNEL:The kernel | |||
SI_QUEUE:sigqueue | |||
SI_TIMER:timer expired | |||
SI_MESGQ:mesq state changed | |||
SI_ASYNCIO:AIO completed | |||
SI_SIGIO:queued SIGIO |
SIGILL | |||
ILL_ILLOPC:illegal opcode | |||
ILL_ILLOPN:illegal operand | |||
ILL_ILLADR:illegal addressing mode | |||
ILL_ILLTRP:illegal trap | |||
ILL_PRVOPC:privileged opcode | |||
ILL_PRVREG:privileged register | |||
ILL_COPROC:coprocessor error | |||
ILL_BADSTK:internal stack error |
SIGFPE | |||
FPE_INTDIV:integer divide by zero | |||
FPE_INTOVF:integer overflow | |||
FPE_FLTDIV:floating point divide by zero | |||
FPE_FLTOVF:floating point overflow | |||
FPE_FLTUND:floating point underflow | |||
FPE_FLTRES:floating point inexact result | |||
FPE_FLTINV:floating point invalid operation | |||
FPE_FLTSUB:subscript out of range |
SIGSEGV | |||
SEGV_MAPERR:address not mapped to object | |||
SEGV_ACCERR:invalid permissions for mapped object |
SIGBUS | |||
BUS_ADRALN:invalid address alignment | |||
BUS_ADRERR:non-existant physical address | |||
BUS_OBJERR:object specific hardware error |
SIGTRAP | |||
TRAP_BRKPT:process breakpoint | |||
TRAP_TRACE:process trace trap |
SIGCHLD | |||
CLD_EXITED:child has exited | |||
CLD_KILLED:child was killed | |||
CLD_DUMPED:child terminated abnormally | |||
CLD_TRAPPED:traced child has trapped | |||
CLD_STOPPED:child has stopped | |||
CLD_CONTINUED:stopped child has continued |
SIGPOLL | |||
POLL_IN:data input available | |||
POLL_OUT:output buffers available | |||
POLL_MSG:input message available | |||
POLL_ERR:i/o error | |||
POLL_PRI:high priority input available | |||
POLL_HUP:device disconnected |
sigprocmask 호출은 현재 블록화된 시그널들을 변경시키는데 사용된다. 호출의 행위는 어떻게 하는가에 따른 값에 의존적이다.
-
- SIG_BLOCK
- 일련의 블록화된 시그널들은 현재 설정과 .I set 인수의 합이다.
- SIG_UNBLOCK
- The signals in set 내의 시그널들은 현재 일련의 블록화된 시그널들에서 삭제된다. 블록화되지 않은 시그널에 대해 블록화하지 않는것이 타당하다.
- SIG_SETMASK
- 블록화된 시그널들의 설정은 인수 .IR set 으로 설정된다.
If oldset 는 -null이 아니고, 시그널 마스크의 이전 값은 .IR oldset 내에 저장된다.
The sigpending 호출은 전달 시그널들에 대한 검사를 허용한다. 전달 시그널들의 시그널 마스크는 set내에저장된다.
sigsuspend 호출은 일시적으로 시그널 마스크를 .I mask에 의해 주어진 프로세스들로 대체하고, 시그널이 수신될때까지 프로세스를 중지시킨다.
반환값
sigaction, sigprocmask, sigpending 그리고 sigsuspend 은 성공하면 0을 실패하면 -1을 리턴한다.에러
- EINVAL
- 부적절한 시그널이 지정되었다. 감지되지 않는 .BR SIGKILL " 또는 " SIGSTOP에 대한 액션을 변경하고자 한다면, .B EINVAL이 또한 생성될 것이다.
- EFAULT
- act, oldact, set 또는 oldset 는 프로세스 주소 영역 중 타당하지 않은 부분인 메모리를 가리킨다.
- EINTR
- 시스템 호출이 인터럽트되었다.
주의
sigprocmask 호출로 .BR SIGKILL " 또는 " SIGSTOP을 블록화하는 것은 불가능하다. 이러한 시도는 무시된다.POSIX에 의하면, 프로세스의 행위는 kill() 또는 raise() 함수들에 의해 생성되지 않는 GFPE, SIGILL, 또는 SIGSEGV를 무시한 후에는 막연해진다. 제로에 의한 정수(Integer) 나누기는 막연한 결과를 갖는다. 일부 아키텍쳐에서, 이는 SIGFPE 시그널을 생성할 것이다. (또한 음수 정수(integer)를 -1로 나누면 SIGFPE를 생성할 수도 있다 ) 이 시그널을 무시하면 무한 루프를 초래할 수 있다.
The POSIX 스펙은 오직 .BR SA_NOCLDSTOP만을 정의한다 . 다른 sa_flags의 사용은 이식이 불가능하다.
SA_RESETHAND 플래그는 동일한 이름의 SVr4 플래그와 호환가능하다.
SA_NODEFER 플래그는 커널 1.3.9과 새로운 버전하에서 동일한 이름의 SVr4 플래그와 호환가능하다.
SVr4 호환성을 위한 SA_RESETHAND 와 SA_NODEFER이름들은오직라이브러리버전3.0.9 그리고 그 이후의 버전에서만 존재한다.
SA_SIGINFO 플래그는 POSIX.1b에 의해서만 명시된다. 이에 대한 지원은 리눅스 2.2에 추가되었다.
sigaction 현재 시그널 처리기에 쿼리를 하기 위해 널 두번째 인수로 호출될 수 있다. 이를 널 두번째 그리고 세번째 인수들로 이를 호출함으로서 현재 머신에 대한 주어진 시그널이 타당한가를 체크하는데 사용될 수 있다.
시그널 체계 조작에 대한 자세한 정보를 얻으려면, .BR 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@asp-linux.co.kr>, 2000년 7월 29일Contenus ©2006-2024 Benjamin Poulain
Design ©2006-2024 Maxime Vantorre