NAME

sigpause - 차단된 시그널들을 원자적으로 해제하고 인터럽트 기다리기

SYNOPSIS

#include <signal.h>

int sigpause(int sigmask);  /* BSD (하지만 NOTES 참고) */

int sigpause(int sig);      /* 시스템 V / 유닉스 95 */

DESCRIPTION

이 함수를 사용해선 안 된다. 대신 sigsuspend(2)를 사용하라.

sigpause() 함수는 어떤 시그널을 기다리도록 설계되어 있다. 프로세스의 시그널 마스크(차단된 시그널들의 집합)를 바꾸고서 시그널이 도착하기를 기다린다. 시그널 도착 시 원래 시그널 마스크를 복원한다.

RETURN VALUE

sigpause()가 반환한 경우 시그널에 의해 중단된 것이므로 반환 값이 -1이고 errnoEINTR로 설정된다.

ATTRIBUTES

이 절에서 사용하는 용어들에 대한 설명은 attributes(7)를 보라.

인터페이스 속성
sigpause() 스레드 안전성 MT-Safe

CONFORMING TO

시스템 V 버전 sigpause()가 POSIX.1-2001에서 표준화되었다. POSIX.1-2008에도 명세되어 있는데, 구식으로 표시되어 있다.

NOTES

역사

이 함수의 전통적인 BSD 버전은 4.2BSD에서 등장했다. 프로세스의 시그널 마스크를 sigmask로 설정한다. 유닉스 95에서 이 함수의 비호환 시스템 V 버전을 표준화하였는데, 프로세스의 시그널 마스크에서 지정한 시그널 sig만 제거한다. 이름이 같은 호환 안 되는 함수 두 가지가 있는 안타까운 상황이 해결된 것은 (int 대신) sigset_t * 인자를 받는 sigsuspend(2) 함수에 의해서이다.

리눅스 참고 사항

리눅스에서는 스팍(sparc64) 아키텍처에서만 이 루틴이 시스템 호출이다.

glibc에서는 기능 확인 매크로 _BSD_SOURCE가 정의되어 있으며 _POSIX_SOURCE _POSIX_C_SOURCE, _XOPEN_SOURCE, _GNU_SOURCE, _SVID_SOURCE 중 어느 것도 정의되어 있지 않은 경우에 BSD 버전을 사용한다. 그 외의 경우에는 시스템 V 버전을 쓰며, 선언을 얻으려면 기능 확인 매크로가 다음과 같이 정의되어 있어야 한다.

glibc 2.19부터는 <signal.h>에서 시스템 V 버전만 드러낸다. 이전에 BSD sigpause()를 사용하던 응용은 sigsuspend(2)를 사용하도록 수정해야 한다.

SEE ALSO

kill(2), sigaction(2), sigprocmask(2), sigsuspend(2), sigblock(3), sigvec(3), feature_test_macros(7)


2021-03-22