sigreturn(2) - wariua/manpages-ko GitHub Wiki
sigreturn, rt_sigreturn - μκ·Έλ νΈλ€λ¬μμ λ°ννκ³ μ€ν νλ μ μ 리νκΈ°
int sigreturn(...);
μ΄λ νλ‘μΈμ€μκ² λΈλ‘ μ λ μκ·Έλμ΄ λκΈ° μ€μ΄λΌκ³ 리λ μ€ μ»€λμ΄ νλ¨νλ©΄ κ·Έ νλ‘μΈμ€ μ¬μ©μ λͺ¨λλ‘ λ€μ λ² μ νν λ (κ°λ Ή μμ€ν νΈμΆμμ λ°νν λλ κ·Έ νλ‘μΈμ€λ₯Ό CPUλ‘ λ€μ μ€μΌμ€ ν λ) μ¬μ©μ κ³΅κ° μ€νμ μ νλ μμ λ§λ€μ΄μ λ€μν νλ‘μΈμ€ λ¬Έλ§₯ μ‘°κ°λ€(νλ‘μΈμ μν μλ, λ μ§μ€ν°λ€, μκ·Έλ λ§μ€ν¬, μκ·Έλ μ€ν μ€μ )μ μ μ₯νλ€.
λν 컀λμ μ¬μ©μ λͺ¨λλ‘μ μ ν μ€μ μκ·Έλ νΈλ€λ¬κ° νΈμΆλλλ‘ νκ³ , νΈλ€λ¬κ° λ°ννλ©΄ νν "μκ·Έλ νΈλ¨νλ¦°(signal trampoline)"μ΄λΌκ³ νλ μ¬μ©μ κ³΅κ° μ½λ μ‘°κ°μΌλ‘ μ μ΄κ° λμ΄κ°κ² νλ€. κ·Έλ¬λ©΄ μκ·Έλ νΈλ¨νλ¦° μ½λμμ sigreturn()
μ νΈμΆνλ€.
sigreturn()
νΈμΆμ μμ μκ·Έλ νΈλ€λ¬λ₯Ό νΈμΆνκΈ° μν΄ νλ κ²λ€(νλ‘μΈμ€ μκ·Έλ λ§μ€ν¬ λ°κΎΈκΈ°, μκ·Έλ μ€ν(sigaltstack(2) μ°Έκ³ ) μ ννκΈ°)μ λͺ¨λ λλλ¦°λ€. μμ μ¬μ©μ κ³΅κ° μ€νμ μ μ₯νλ μ 보λ₯Ό μ΄μ©ν΄ sigreturn()
μ νλ‘μΈμ€μ μκ·Έλ λ§μ€ν¬λ₯Ό 볡μνκ³ , μ€νμ μ ννκ³ , νλ‘μΈμ€μ λ¬Έλ§₯(νλ‘μΈμ νλκ·Έ λ° λ μ§μ€ν°λ€, μ€ν ν¬μΈν°μ μΈμ€νΈλμ
ν¬μΈν° ν¬ν¨)μ 볡μνμ¬ μκ·Έλμ μν΄ μ€λ¨λλ μ§μ μμ νλ‘μΈμ€κ° μ€νμ μ¬κ°νλλ‘ νλ€.
sigreturn()
μ μ λ λ°ννμ§ μλλ€.
λ§μ μ λμ€λ₯ μμ€ν
μλ sigreturn()
μμ€ν
νΈμΆμ΄λ κ·Έμ κ°κΉμ΄ λ±κ°λ¬Όμ΄ μλ€. νμ§λ§ μ΄ νΈμΆμ POSIXμ λͺ
μΈλμ΄ μμ§ μμΌλ©° μμ€ν
μ λ°λΌ λμ μΈλΆ λ΄μ©μ΄ λ€λ₯΄λ€.
sigreturn()
μ μκ·Έλ νΈλ€λ¬λ₯Ό ꡬνν μ μλλ‘ νκΈ° μν΄μλ§ μ‘΄μ¬νλ€. μ λλ‘ μ§μ νΈμΆν΄μλ μ λλ€. (μ€μ λ‘ GNU C λΌμ΄λΈλ¬λ¦¬μ κ°μ΄ sigreturn()
λνΌλ -1μ λ°ννκ³ errno
λ₯Ό ENOSYS
λ‘ μ€μ νκΈ°λ§ νλ€.) sigreturn()
μ μ λ¬νλ μΈμλ€μ μΈλΆ λ΄μ©μ μν€ν
μ²μ λ°λΌ λ€λ₯΄λ€. (x86-64 κ°μ μΌλΆ μν€ν
μ²μμλ sigreturn()
μ΄ μ무 μΈμλ λ°μ§ μλλ€. μμ 컀λμ΄ μ¬μ©μ κ³΅κ° μ€νμ λ§λ€μλ μ€ν νλ μ λ΄μ νμν λͺ¨λ μ λ³΄κ° μκΈ° λλ¬Έμ΄λ€.)
μλ μμ μλ μ λμ€ μμ€ν
μμ μκ·Έλ νΈλ¨νλ¦° μ½λλ₯Ό μ¬μ©μ μ€νμ λμλ€. μμ¦μ μ¬μ©μ μ€ν νμ΄μ§λ€μ 보νΈνμ¬ μ½λ μ€νμ λΆννλ€. κ·Έλμ νλ 리λ
μ€ μμ€ν
μμλ μν€ν
μ²μ λ°λΌ μκ·Έλ νΈλ¨νλ¦° μ½λκ° vdso(7)λ C λΌμ΄λΈλ¬λ¦¬ μ€ νμͺ½μ μλ€. νμμ κ²½μ°μ C λΌμ΄λΈλ¬λ¦¬μ sigaction(2) λνΌ ν¨μκ° sigaction
ꡬ쑰체μ sa_restorer
νλμ μ£Όμλ₯Ό λ£μ΄μ νΈλ¨νλ¦° μ½λμ μμΉλ₯Ό μλ € μ£Όλ©°, κ·Έλ sa_flags
νλμ SA_RESTORER
νλκ·Έλ₯Ό μ€μ νλ€.
μ μ₯λ νλ‘μΈμ€ λ¬Έλ§₯ μ λ³΄κ° ucontext_t
ꡬ쑰체(<sys/ucontext.h>
μ°Έκ³ )μ λ€μ΄κ°λ€. SA_SIGINFO
νλκ·Έλ₯Ό μ΄ sigaction(2)μ ν΅ν΄ μ€μ ν νΈλ€λ¬ λ΄μμ μΈ λ²μ§Έ μΈμλ‘ κ·Έ ꡬ쑰체λ₯Ό λ³Ό μ μλ€.
λͺλͺ λ€λ₯Έ μ λμ€ μμ€ν
λ€μμ μκ·Έλ νΈλ¨νλ¦°μ λμμ΄ μ΄μ§ λ€λ₯΄λ€. ꡬ체μ μΌλ‘ μ΄λ€ μμ€ν
μμλ μ¬μ©μ λͺ¨λλ‘ μ ν μ 컀λμ΄ (μκ·Έλ νΈλ€λ¬κ° μλ) νΈλ¨νλ¦°μκ² μ μ΄λ₯Ό λκΈ°λ©°, κ·Έ νΈλ¨νλ¦° μ½λκ° μκ·Έλ νΈλ€λ¬λ₯Ό (κ·Έλ¦¬κ³ νΈλ€λ¬ λ°ν ν sigreturn()
μ) νΈμΆνλ€.
μλ 리λ
μ€ μμ€ν
νΈμΆμ μ΄λ¦μ sigreturn()
μ΄μλ€. νμ§λ§ 리λ
μ€ 2.2μ μ€μκ° μκ·Έλμ΄ μΆκ°λλ©΄μ νμ₯λ sigset_t
νμ
μ μ§μνκΈ° μν΄ μλ‘μ΄ μμ€ν
νΈμΆ rt_sigreturn()
μ΄ μΆκ°λμλ€. GNU C λΌμ΄λΈλ¬λ¦¬μμ μ΄λ° μΈλΆ μ¬νμ κ°μΆκ³ 컀λμ΄ μ 곡ν λ ν¬λͺ
νκ² rt_sigreturn()
λ₯Ό μ΄μ©νλ€.
kill(2), restart_syscall(2), sigaltstack(2), signal(2), getcontext(3), signal(7), vdso(7)
2017-09-15