sigprocmask(2) - wariua/manpages-ko GitHub Wiki
sigprocmask, rt_sigprocmask - λΈλ‘ λ μκ·Έλ μ‘°μ¬νκ³ λ°κΎΈκΈ°
#include <signal.h>
/* glibc λνΌ ν¨μ μν */
int sigprocmask(int how, const sigset_t *set, sigset_t *oldset);
/* κΈ°λ° μμ€ν
νΈμΆ μν */
int rt_sigprocmask(int how, const kernel_sigset_t *set,
kernel_sigset_t *oldset, size_t sigsetsize);
/* ꡬμ μμ€ν
νΈμΆ μν (μ κ±° μμ ) */
int sigprocmask(int how, const old_kernel_sigset_t *set,
old_kernel_sigset_t *oldset);
glibc κΈ°λ₯ νμΈ λ§€ν¬λ‘ μ건 (feature_test_macros(7) μ°Έκ³ ):
-
sigprocmask()
: _POSIX_C_SOURCE
sigprocmask()
λ₯Ό μ¬μ©ν΄ νΈμΆ μ€λ λμ μκ·Έλ λ§μ€ν¬λ₯Ό κ°μ Έμ€κ³ λ°κΎΌλ€. μκ·Έλ λ§μ€ν¬λ νμ¬ νΈμΆμμκ² μ λ¬μ΄ μ°¨λ¨λ μκ·Έλλ€μ μ§ν©μ΄λ€. (λ μμΈν λ΄μ©μ signal(7)λ μ°Έκ³ .)
λ€μκ³Ό κ°μ΄ how
κ°μ λ°λΌ νΈμΆμ λμ λ°©μμ΄ λ¬λΌμ§λ€.
SIG_BLOCK
- νμ¬ μ§ν©κ³Ό
set
μΈμμ κ΅μ§ν©μ΄ μ°¨λ¨ μκ·Έλ μ§ν©μ΄ λλ€. SIG_UNBLOCK
- νμ¬ μ°¨λ¨ μκ·Έλ μ§ν©μμ
set
μ μκ·Έλλ€μ μ κ±°νλ€. λ§ν μμ§ μμ μκ·Έλμ μ κ±°νλ €λ κ²λ νμ©νλ€. SIG_SETMASK
- μ°¨λ¨ μκ·Έλ μ§ν©μ
set
μΈμλ‘ μ€μ νλ€.
oldset
μ΄ NULLμ΄ μλλ©΄ μ΄μ μκ·Έλ λ§μ€ν¬ κ°μ oldset
μ μ μ₯νλ€.
set
μ΄ NULLμ΄λ©΄ μκ·Έλ λ§μ€ν¬κ° λ°λμ§ μλλ€. (μ¦, how
λ₯Ό 무μνλ€.) κ·Έλ λ€κ³ ν΄λ νμ¬ μκ·Έλ λ§μ€ν¬ κ°μ oldset
μΌλ‘ (NULLμ΄ μλλΌλ©΄) λ°ννλ€.
sigset_t
("μκ·Έλ μ§ν©") νμ
λ³μλ₯Ό λ³κ²½νκ³ κ²μ¬νλ ν¨μλ€μ sigsetops(3)μμ μ€λͺ
νλ€.
λ€μ€ μ€λ λ νλ‘μΈμ€μμμ sigprocmask()
μ¬μ©μ λͺ
μΈλμ΄ μμ§ μλ€. pthread_sigmask(3)λ₯Ό 보λΌ.
sigprocmask()
λ μ±κ³΅ μ 0μ λ°ννκ³ μ€λ₯ μ -1μ λ°ννλ€. μ€λ₯ λλ μμΈμ λνλ΄λλ‘ errno
λ₯Ό μ€μ νλ€.
EFAULT
-
set
μ΄λoldset
μΈμκ° νλ‘μΈμ€μκ² ν λΉλ μ£Όμ κ³΅κ° λ°μ κ°λ¦¬ν€κ³ μλ€. EINVAL
-
how
λ‘ μ§μ ν κ°μ΄ μ ν¨νμ§ μκ±°λsigsetsize
λ‘ μ λ¬ν ν¬κΈ°λ₯Ό 컀λμ΄ μ§μνμ§ μλλ€.
POSIX.1-2001, POSIX.1-2008.
SIGKILL
μ΄λ SIGSTOP
μ λ§λ κ²μ λΆκ°λ₯νλ€. κ·Έλ κ² νλ €λ μλλ μ‘°μ©ν 무μλλ€.
νλ‘μΈμ€μ κ° μ€λ λκ° κ°μμ μκ·Έλ λ§μ€ν¬λ₯Ό κ°μ§κ³ μλ€.
fork(2)λ₯Ό ν΅ν΄ μμ±λ μμμ λΆλͺ¨μ μκ·Έλ λ§μ€ν¬ μ¬λ³Έμ λ¬Όλ €λ°λλ€. execve(2)λ₯Ό κ±°μΉλ©΄μ μκ·Έλ λ§μ€ν¬κ° 보쑴λλ€.
SIGBUG
, SIGFPE
, SIGILL
, SIGSEGV
κ° λΈλ‘ λ μνμμ μμ±λλ κ²½μ° kill(2)μ΄λ sigqueue(3), raise(3)λ‘ μκ·Έλμ΄ μμ±λ κ² μλλ©΄ κ²°κ³Όκ° κ·μ λμ΄ μμ§ μλ€.
μκ·Έλ μ§ν© μ‘°μμ λν μμΈν λ΄μ©μ sigsetops(3)λ₯Ό 보λΌ.
μ°Έκ³ λ‘ set
κ³Ό oldset
μ λͺ¨λ NULLλ‘ μ§μ νλ κ²λ (μμ£Ό μ μ©νμ§λ μμ§λ§) νμ©λλ€.
컀λμ sigset_t
μ μλ C λΌμ΄λΈλ¬λ¦¬μμ μ°λ κ²κ³Ό ν¬κΈ°κ° λ€λ₯΄λ€. μ΄ λ§€λ΄μΌ νμ΄μ§μμλ μ μλ₯Ό kernel_sigset_t
λΌκ³ λΆλ₯Έλ€. (κ·Έλ μ§λ§ 컀λ μμ€μμμ μ΄λ¦μ sigset_t
μ΄λ€.)
glibcμ sigprocmask()
λνΌ ν¨μμμλ NPTL μ€λ λ© κ΅¬ν λ΄λΆμμ μ°λ λ κ°μ§ μ€μκ° μκ·Έλμ λ§μΌλ €λ μλλ₯Ό μ‘°μ©ν 무μνλ€. μμΈν λ΄μ©μ nptl(7)μ 보λΌ.
μλ 리λ
μ€ μμ€ν
νΈμΆμ μ΄λ¦μ sigprocmask()
μλ€. νμ§λ§ 리λ
μ€ 2.2μ μ€μκ° μκ·Έλμ΄ μΆκ°λλ©΄μ κ·Έ μμ€ν
νΈμΆμ΄ μ§μνλ κ³ μ ν¬κΈ° 32λΉνΈ sigset_t
νμ
(μ΄ λ§€λ΄μΌ νμ΄μ§μμ old_kernel_sigset_t
)μ΄ λλ μ©λμ λ§μ§ μκ² λμλ€. κ·Έμ λ°λΌ νμ₯λ sigset_t
νμ
(μ΄ λ§€λ΄μΌ νμ΄μ§μμ kernel_sigset_t
)μ μ§μνκΈ° μν΄ μλ‘μ΄ μμ€ν
νΈμΆ rt_sigprocmask()
κ° μΆκ°λμλ€. μ μμ€ν
νΈμΆμμ λ€ λ²μ§Έ μΈμλ‘ size_t sigsetsize
λ₯Ό λ°λλ°, μ΄λ set
κ³Ό oldset
μ μκ·Έλ μ§ν©μ λ°μ΄νΈ λ¨μ ν¬κΈ°λ₯Ό λνλΈλ€. νμ¬λ μ΄ μΈμκ° κ³ μ λ μν€ν
μ²λ³ κ°(sizeof(kernel_sigset_t)
)μ κ°μ ΈμΌ νλ€.
glibcμ sigprocmask()
λνΌ ν¨μμμ μ΄λ° μΈλΆ μ¬νμ κ°μΆκ³ 컀λμ΄ μ 곡ν λ ν¬λͺ
νκ² rt_sigprocmask()
λ₯Ό νΈμΆνλ€.
kill(2), pause(2), sigaction(2), signal(2), sigpending(2), sigsuspend(2), pthread_sigmask(3), sigqueue(3), sigsetops(3), signal(7)
2017-09-15