sigqueue(3) - wariua/manpages-ko GitHub Wiki
sigqueue - νλ‘μΈμ€μκ² μκ·Έλκ³Ό λ°μ΄ν° νμ νκΈ°
#include <signal.h>
int sigqueue(pid_t pid, int sig, const union sigval value);
glibc κΈ°λ₯ νμΈ λ§€ν¬λ‘ μ건 (feature_test_macros(7) μ°Έκ³ ):
-
sigqueue()
: _POSIX_C_SOURCE >= 199309L
sigqueue()
λ pid
μ μ€ PIDμ νλ‘μΈμ€μκ² sig
μ μ§μ ν μκ·Έλμ 보λΈλ€. μκ·Έλμ 보λ΄κΈ° μν΄ νμν κΆνμ kill(2)κ³Ό κ°λ€. kill(2)μμμ²λΌ λ μκ·Έλ(0)μ μ΄μ©ν΄ ν΄λΉ PIDμ νλ‘μΈμ€κ° μ‘΄μ¬νλμ§ νμΈν μ μλ€.
μκ·Έλμ λλ°ν΄ λ³΄λΌ λ°μ΄ν° νλͺ©(μ μ λλ ν¬μΈν° κ°)μ value
μΈμλ‘ μ§μ νλ©°, λ€μ νμ
μ΄λ€.
union sigval {
int sival_int;
void *sival_ptr;
};
μμ νλ‘μΈμ€μμ sigaction(2)μ SA_SIGINFO
νλκ·Έλ₯Ό μ¨μ μ΄ μκ·Έλμ λν νΈλ€λ¬λ₯Ό μ€μΉν΄ λμλ€λ©΄ νΈλ€λ¬ λ λ²μ§Έ μΈμλ‘ μ λ¬λλ siginfo_t
ꡬ쑰체μ si_value
νλλ₯Ό ν΅ν΄ μ΄ λ°μ΄ν°λ₯Ό μ»μ μ μλ€. λλΆμ΄ κ·Έ ꡬ쑰체μ si_code
νλκ° SI_QUEUE
λ‘ μ€μ λ κ²μ΄λ€.
μ±κ³΅ μ sigqueue()
λ 0μ λ°ννμ¬ μκ·Έλμ΄ μμ νλ‘μΈμ€μκ² μ±κ³΅μ μΌλ‘ νμ λμμμ λνλΈλ€. κ·Έ μΈμ κ²½μ°μλ -1μ λ°ννλ©° μ€λ₯λ₯Ό λνλ΄λλ‘ errno
λ₯Ό μ€μ νλ€.
EAGAIN
- νμ λ£μ μ μλ μκ·Έλ κ°μ νκ³μ λλ¬νλ€. (μμΈν λ΄μ©μ signal(7)μ 보λΌ.)
EINVAL
-
sig
κ° μ ν¨νμ§ μλ€. EPERM
- νλ‘μΈμ€κ° μμ νλ‘μΈμ€λ‘ μκ·Έλμ λ³΄λΌ κΆνμ κ°μ§κ³ μμ§ μλ€. νμν κΆνμ λν΄μ kill(2)μ 보λΌ.
ESRCH
-
pid
μ μΌμΉνλ PIDμ νλ‘μΈμ€κ° μλ€.
리λ
μ€ 2.2μμ sigqueue()
μ κΈ°λ° λλ rt_sigqueueinfo(2) μμ€ν
νΈμΆμ΄ μ²μ λ±μ₯νλ€.
μ΄ μ μμ μ¬μ©νλ μ©μ΄λ€μ λν μ€λͺ μ attributes(7)λ₯Ό 보λΌ.
μΈν°νμ΄μ€ | μμ± | κ° |
---|---|---|
sigqueue() |
μ€λ λ μμ μ± | MT-Safe |
POSIX.1-2001, POSIX.1-2008.
μ΄ ν¨μλ‘ μΈν΄ νΈμΆν νλ‘μΈμ€μκ² μκ·Έλμ 보λ΄κ² λλλ° νΈμΆ μ€λ λκ° κ·Έ μκ·Έλμ λ§κ³ μμ§ μμκ³ , λ€λ₯Έ μ΄λ€ μ€λ λλ (λΉμ°¨λ¨μΌλ‘ λκ±°λ sigwait(3)μΌλ‘ κΈ°λ€λ €μ) κ·Έ μκ·Έλμ μ²λ¦¬νλ €λ μμ¬κ° μμμΌλ©΄ μ΄ ν¨μκ° λ°ννκΈ° μ μ μ΄ μ€λ λμκ² μ μ΄λ μ΄λ€ μκ·Έλμ΄ μ λ¬λμ΄μΌ νλ€.
리λ
μ€μμ sigqueue()
λ rt_sigqueueinfo(2) μμ€ν
νΈμΆμ μ΄μ©ν΄ ꡬνλμ΄ μλ€. κ·Έ μμ€ν
νΈμΆμ μΈ λ²μ§Έ μΈμκ° siginfo_t
κ΅¬μ‘°μ²΄μΈ μ μ΄ λ€λ₯Έλ°, μ΄ κ΅¬μ‘°μ²΄κ° μμ νλ‘μΈμ€μ μκ·Έλ νΈλ€λ¬μκ² μ 곡λκ±°λ μμ νλ‘μΈμ€μ sigtimedwait(2) νΈμΆμ μν΄ λ°νλλ€. glibcμ sigqueue()
λνΌμμ μ΄ μΈμ uinfo
λ₯Ό λ€μκ³Ό κ°μ΄ μ€μ νλ€.
uinfo.si_signo = sig; /* sigqueue()μκ² μ€ μΈμ */
uinfo.si_code = SI_QUEUE;
uinfo.si_pid = getpid(); /* μ‘μ μμ νλ‘μΈμ€ ID */
uinfo.si_uid = getuid(); /* μ‘μ μμ μ€μ UID */
uinfo.si_value = val; /* sigqueue()μκ² μ€ μΈμ */
kill(2), rt_sigqueueinfo(2), sigaction(2), signal(2), pthread_sigqueue(3), sigwait(3), signal(7)
2017-09-15