sigwaitinfo(2) - wariua/manpages-ko GitHub Wiki
sigwaitinfo, sigtimedwait, rt_sigtimedwait - λκΈ°μ μΌλ‘ λκΈ° μκ·Έλ κΈ°λ€λ¦¬κΈ°
#include <signal.h>
int sigwaitinfo(const sigset_t *set, siginfo_t *info);
int sigtimedwait(const sigset_t *set, siginfo_t *info,
const struct timespec *timeout);
glibc κΈ°λ₯ νμΈ λ§€ν¬λ‘ μ건 (feature_test_macros(7) μ°Έκ³ ):
-
sigwaitinfo()
,sigtimedwait()
: _POSIX_C_SOURCE >= 199309L
sigwaitinfo()
λ set
μ μκ·Έλλ€ μ€ νλκ° λ―Έμ²λ¦¬ μνμΌ λκΉμ§ νΈμΆ μ€λ λμ μ€νμ μ€μ§νλ€. (set
μ μκ·Έλλ€ μ€ νλκ° μ΄λ―Έ νΈμΆ μ€λ λμκ² λ―Έμ²λ¦¬ μνμ΄λ©΄ sigwaitinfo()
κ° μ¦μ λ°ννκ² λλ€.)
sigwaitinfo()
λ λ―Έμ²λ¦¬ μκ·Έλ μ§ν©μμ κ·Έ μκ·Έλμ μ κ±°νκ³ μ μκ·Έλ λ²νΈλ₯Ό ν¨μ κ²°κ³Όλ‘ λ°ννλ€. info
μΈμκ° NULLμ΄ μλλΌλ©΄ κ·Έ λ²νΌλ₯Ό μ΄μ©ν΄ μκ·Έλμ λν μ 보λ₯Ό λ΄μ siginfo_t
νμ
ꡬ쑰체(sigaction(2) μ°Έκ³ )λ₯Ό λ°ννλ€.
set
μ μλ μκ·Έλ μ¬λ¬ κ°κ° νΈμΆμμκ² λ―Έμ²λ¦¬ μνμΈ κ²½μ° sigwaitinfo()
κ° κ°μ Έμ€λ μκ·Έλμ μΌλ°μ μΈ μμ κ·μΉμ λ°λΌ μ ν΄μ§λ€. λ μμΈν λ΄μ©μ signal(7)μ 보λΌ.
sigtimedwait()
μ sigwaitinfo()
μ μ νν κ°μ μμΌλ‘ λμνλ μΆκ°λ‘ timeout
μΈμκ° μμ΄μ μκ·Έλμ κΈ°λ€λ¦¬λ©° μ€λ λλ₯Ό μ€μ§ν΄ λ μκ°μ μ§μ νλ€. (μ΄ μκ°μ μμ€ν
ν΄λ ν΄μλμ λ°λΌ μ¬λ¦Ό νκ² λλ©° 컀λ μ€μΌμ€λ§ μ§μ°λ μκΈ° λλ¬Έμ κ·Έ μκ°μ μ½κ° λκΈΈ μλ μλ€.) μ΄ μΈμλ λ€μ νμ
μ΄λ€.
struct timespec {
time_t tv_sec; /* μ΄ */
long tv_nsec; /* λλ
Έμ΄ */
};
μ΄ κ΅¬μ‘°μ²΄μ λ νλ λͺ¨λλ₯Ό 0μΌλ‘ μ§μ νλ©΄ κ²μ¬λ₯Ό μννλ κ²μ΄λ€. μ¦, νΈμΆμμκ² λ―Έμ²λ¦¬μλ μκ·Έλμ λν μ 보λ₯Ό κ°μ§κ³ , λλ set
μ μ΄λ μκ·Έλλ λ―Έμ²λ¦¬κ° μλμμΌλ©΄ μ€λ₯μ ν¨κ» sigtimedwait()
μ΄ μ¦μ λ°ννλ€.
μ±κ³΅ μ sigwaitinfo()
μ sigtimedwait()
λͺ¨λ μκ·Έλ λ²νΈλ₯Ό (μ¦ 0λ³΄λ€ ν° κ°μ) λ°ννλ€. μ€ν¨ μ λ νΈμΆ λͺ¨λ -1μ λ°ννλ©° μ€λ₯λ₯Ό λνλ΄λλ‘ errno
λ₯Ό μ€μ νλ€.
EAGAIN
-
sigtimedwait()
μ μ§μ νtimeout
κΈ°κ° λ΄μset
μ μ΄λ€ μκ·Έλλ λ―Έμ²λ¦¬ μνκ° λμ§ μμλ€. EINTR
- μκ·Έλ νΈλ€λ¬μ μν΄ κΈ°λ€λ¦¬κΈ°κ° μ€λ¨λμλ€. signal(7) μ°Έκ³ . (μ΄ νΈλ€λ¬λ
set
μ μλ κ² μΈμ μκ·Έλμ λν κ²μ΄λ€.) EINVAL
-
timeout
μ΄ μ ν¨νμ§ μλ€.
POSIX.1-2001, POSIX.1-2008.
μΌλ°μ μ¬μ© λ°©μμμλ νΈμΆ νλ‘κ·Έλ¨μ΄ sigprocmask(2)λ₯Ό 미리 νΈμΆν΄μ set
μμ μκ·Έλλ€μ λ§μΌλ©° (κ·Έλμ μ΄μ΄μ§λ sigwaitinfo()
λ΄μ§ sigtimedwait()
νΈμΆκ³Όμ μ¬μ΄μμ μκ·Έλμ΄ λ―Έμ²λ¦¬ μνκ° λλ κ²½μ° κΈ°λ³Έ μ²λ¦¬κ° μΌμ΄λμ§ μλλ‘ νλ©°), κ·Έ μκ·Έλλ€μ λν νΈλ€λ¬λ₯Ό μ€μ νμ§ μλλ€. λ€μ€ μ€λ λ νλ‘κ·Έλ¨μμλ sigwaitinfo()
λ΄μ§ sigtimedwait()
μ νΈμΆν μ€λ λ μΈμ μ€λ λμμ κΈ°λ³Έ μ²λ¦¬ λ°©μμ λ°λΌ μκ·Έλμ΄ μ²λ¦¬λλ κ²μ λ§κΈ° μν΄ λͺ¨λ μ€λ λμμ μκ·Έλμ λ§μμΌ νλ€.
μ΄λ€ μ€λ λμ λ―Έμ²λ¦¬ μνμΈ μκ·Έλλ€μ μ§ν©μ νΉλ³ν κ·Έ μ€λ λμκ² λ―Έμ²λ¦¬μΈ μκ·Έλλ€κ³Ό νλ‘μΈμ€ μ 체μκ² λ―Έμ²λ¦¬μΈ μκ·Έλλ€μ ν©μ§ν©μ΄λ€ (signal(7) μ°Έκ³ ).
SIGKILL
λ° SIGSTOP
μ κΈ°λ€λ¦¬λ €λ μλλ μ‘°μ©ν 무μλλ€.
ν νλ‘μΈμ€μ μ¬λ¬ μ€λ λκ° sigwaitinfo()
λ΄μ§ sigtimedwait()
μμ κ°μ μκ·Έλ(λ€)μ κΈ°λ€λ¦¬λ©° λΈλ‘ λμ΄ μλ κ²½μ°μ νλ‘μΈμ€ μ 체μ λν μκ·Έλμ΄ λ―Έμ²λ¦¬κ° λλ©΄ κ·Έ μ€λ λλ€ μ€ μ νν ν κ°κ° μ€μ λ‘ μκ·Έλμ λ°κ² λλ€. μ΄λ μ€λ λκ° μκ·Έλμ λ°λμ§λ μ ν΄μ Έ μμ§ μλ€.
sigwaitinfo()
λ΄μ§ sigtimedwait()
μ λΉμ ν¨ λ©λͺ¨λ¦¬ μ£Όμ μ κ·ΌμΌλ‘ μΈν SIGSEGV
λ μ°μ μ€λ₯λ‘ μΈν SIGFPE
μ²λΌ λκΈ°μ μΌλ‘ μμ±λ μκ·Έλμ λ°λ λ°λ μΈ μ μλ€. κ·Έλ° μκ·Έλλ€μ μκ·Έλ νΈλ€λ¬λ₯Ό ν΅ν΄μλ§ μ‘μ μ μλ€.
POSIXμμλ sigtimedwait()
μ timeout
μΈμμμ NULL κ°μ μλ―Έλ₯Ό λͺ
μΈ μ λ κ²μΌλ‘ λ¨κ²¨λμ΄ μ΄λ₯Ό sigwaitinfo()
νΈμΆκ³Ό κ°μ μλ―Έλ‘ νλ κ°λ₯μ±μ νμ©νλ©°, μ€μ λ‘ λ¦¬λ
μ€μμ κ·Έλ κ² νλ€.
리λ
μ€μμ sigwaitinfo()
λ sigtimedwait()
μμ ꡬνλ λΌμ΄λΈλ¬λ¦¬ ν¨μμ΄λ€.
glibcμ sigwaitinfo()
λ° sigtimedwait()
λνΌ ν¨μμμλ NPTL μ€λ λ© κ΅¬ν λ΄λΆμμ μ°λ λ κ°μ§ μ€μκ° μκ·Έλμ κΈ°λ€λ¦¬λ €λ μλλ₯Ό μ‘°μ©ν 무μνλ€.
μλ 리λ
μ€ μμ€ν
νΈμΆμ μ΄λ¦μ sigtimedwait()
μ΄μλ€. νμ§λ§ 리λ
μ€ 2.2μ μ€μκ° μκ·Έλμ΄ μΆκ°λλ©΄μ κ·Έ μμ€ν
νΈμΆμ΄ μ§μνλ κ³ μ ν¬κΈ° 32λΉνΈ sigset_t
νμ
μ΄ λλ μ©λμ λ§μ§ μκ² λμλ€. κ·Έμ λ°λΌ νμ₯λ sigset_t
νμ
μ μ§μνκΈ° μν΄ μλ‘μ΄ μμ€ν
νΈμΆ rt_sigtimedwait()
μ΄ μΆκ°λμλ€. μ μμ€ν
νΈμΆμμ λ€ λ²μ§Έ μΈμλ‘ size_t sigsetsize
λ₯Ό λ°λλ°, μ΄λ set
μ μκ·Έλ μ§ν©μ λ°μ΄νΈ λ¨μ ν¬κΈ°λ₯Ό λνλΈλ€. νμ¬λ μ΄ μΈμκ° sizeof(sigset_t)
κ°μ κ°μ ΈμΌ νλ€. (μ κ·Έλ¬λ©΄ EINVAL
μ€λ₯κ° λλ€.) glibcμ sigtimedwait()
λνΌ ν¨μμμ μ΄λ° μΈλΆ μ¬νμ κ°μΆκ³ 컀λμ΄ μ 곡ν λ ν¬λͺ
νκ² rt_sigtimedwait()
μ νΈμΆνλ€.
kill(2), sigaction(2), signal(2), signalfd(2), sigpending(2), sigprocmask(2), sigqueue(3), sigsetops(3), sigwait(3), signal(7), time(7)
2017-09-15