sigreturn(2) - wariua/manpages-ko GitHub Wiki

NAME

sigreturn, rt_sigreturn - μ‹œκ·Έλ„ ν•Έλ“€λŸ¬μ—μ„œ λ°˜ν™˜ν•˜κ³  μŠ€νƒ ν”„λ ˆμž„ μ •λ¦¬ν•˜κΈ°

SYNOPSIS

int sigreturn(...);

DESCRIPTION

μ–΄λŠ ν”„λ‘œμ„ΈμŠ€μ—κ²Œ 블둝 μ•ˆ 된 μ‹œκ·Έλ„μ΄ λŒ€κΈ° 쀑이라고 λ¦¬λˆ…μŠ€ 컀널이 νŒλ‹¨ν•˜λ©΄ κ·Έ ν”„λ‘œμ„ΈμŠ€ μ‚¬μš©μž λͺ¨λ“œλ‘œ λ‹€μŒ 번 μ „ν™˜ν•  λ•Œ (κ°€λ Ή μ‹œμŠ€ν…œ ν˜ΈμΆœμ—μ„œ λ°˜ν™˜ν•  λ•Œλ‚˜ κ·Έ ν”„λ‘œμ„ΈμŠ€λ₯Ό CPU둜 λ‹€μ‹œ μŠ€μΌ€μ€„ ν•  λ•Œ) μ‚¬μš©μž 곡간 μŠ€νƒμ— μƒˆ ν”„λ ˆμž„μ„ λ§Œλ“€μ–΄μ„œ λ‹€μ–‘ν•œ ν”„λ‘œμ„ΈμŠ€ λ¬Έλ§₯ 쑰각듀(ν”„λ‘œμ„Έμ„œ μƒνƒœ μ›Œλ“œ, λ ˆμ§€μŠ€ν„°λ“€, μ‹œκ·Έλ„ 마슀크, μ‹œκ·Έλ„ μŠ€νƒ μ„€μ •)을 μ €μž₯ν•œλ‹€.

λ˜ν•œ 컀널은 μ‚¬μš©μž λͺ¨λ“œλ‘œμ˜ μ „ν™˜ 쀑에 μ‹œκ·Έλ„ ν•Έλ“€λŸ¬κ°€ ν˜ΈμΆœλ˜λ„λ‘ ν•˜κ³ , ν•Έλ“€λŸ¬κ°€ λ°˜ν™˜ν•˜λ©΄ ν”νžˆ "μ‹œκ·Έλ„ νŠΈλž¨νŽ„λ¦°(signal trampoline)"이라고 ν•˜λŠ” μ‚¬μš©μž 곡간 μ½”λ“œ 쑰각으둜 μ œμ–΄κ°€ λ„˜μ–΄κ°€κ²Œ ν•œλ‹€. 그러면 μ‹œκ·Έλ„ νŠΈλž¨νŽ„λ¦° μ½”λ“œμ—μ„œ sigreturn()을 ν˜ΈμΆœν•œλ‹€.

sigreturn() ν˜ΈμΆœμ€ μ•žμ„œ μ‹œκ·Έλ„ ν•Έλ“€λŸ¬λ₯Ό ν˜ΈμΆœν•˜κΈ° μœ„ν•΄ ν–ˆλ˜ 것듀(ν”„λ‘œμ„ΈμŠ€ μ‹œκ·Έλ„ 마슀크 λ°”κΎΈκΈ°, μ‹œκ·Έλ„ μŠ€νƒ(sigaltstack(2) μ°Έκ³ ) μ „ν™˜ν•˜κΈ°)을 λͺ¨λ‘ λ˜λŒλ¦°λ‹€. μ•žμ„œ μ‚¬μš©μž 곡간 μŠ€νƒμ— μ €μž₯ν–ˆλ˜ 정보λ₯Ό μ΄μš©ν•΄ sigreturn()은 ν”„λ‘œμ„ΈμŠ€μ˜ μ‹œκ·Έλ„ 마슀크λ₯Ό λ³΅μ›ν•˜κ³ , μŠ€νƒμ„ μ „ν™˜ν•˜κ³ , ν”„λ‘œμ„ΈμŠ€μ˜ λ¬Έλ§₯(ν”„λ‘œμ„Έμ„œ ν”Œλž˜κ·Έ 및 λ ˆμ§€μŠ€ν„°λ“€, μŠ€νƒ 포인터와 μΈμŠ€νŠΈλŸ­μ…˜ 포인터 포함)을 λ³΅μ›ν•˜μ—¬ μ‹œκ·Έλ„μ— μ˜ν•΄ μ€‘λ‹¨λλ˜ μ§€μ μ—μ„œ ν”„λ‘œμ„ΈμŠ€κ°€ 싀행을 μž¬κ°œν•˜λ„λ‘ ν•œλ‹€.

RETURN VALUE

sigreturn()은 μ ˆλŒ€ λ°˜ν™˜ν•˜μ§€ μ•ŠλŠ”λ‹€.

CONFORMING TO

λ§Žμ€ μœ λ‹‰μŠ€λ₯˜ μ‹œμŠ€ν…œμ—λŠ” sigreturn() μ‹œμŠ€ν…œ ν˜ΈμΆœμ΄λ‚˜ 그에 κ°€κΉŒμš΄ 등가물이 μžˆλ‹€. ν•˜μ§€λ§Œ 이 ν˜ΈμΆœμ€ POSIX에 λͺ…μ„Έλ˜μ–΄ μžˆμ§€ μ•ŠμœΌλ©° μ‹œμŠ€ν…œμ— 따라 λ™μž‘ μ„ΈλΆ€ λ‚΄μš©μ΄ λ‹€λ₯΄λ‹€.

NOTES

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()을) ν˜ΈμΆœν•œλ‹€.

C 라이브러리/컀널 차이

μ›λž˜ λ¦¬λˆ…μŠ€ μ‹œμŠ€ν…œ 호좜의 이름은 sigreturn()μ΄μ—ˆλ‹€. ν•˜μ§€λ§Œ λ¦¬λˆ…μŠ€ 2.2에 μ‹€μ‹œκ°„ μ‹œκ·Έλ„μ΄ μΆ”κ°€λ˜λ©΄μ„œ ν™•μž₯된 sigset_t νƒ€μž…μ„ μ§€μ›ν•˜κΈ° μœ„ν•΄ μƒˆλ‘œμš΄ μ‹œμŠ€ν…œ 호좜 rt_sigreturn()이 μΆ”κ°€λ˜μ—ˆλ‹€. GNU C λΌμ΄λΈŒλŸ¬λ¦¬μ—μ„œ 이런 μ„ΈλΆ€ 사항을 감좔고 컀널이 μ œκ³΅ν•  λ•Œ 투λͺ…ν•˜κ²Œ rt_sigreturn()λ₯Ό μ΄μš©ν•œλ‹€.

SEE ALSO

kill(2), restart_syscall(2), sigaltstack(2), signal(2), getcontext(3), signal(7), vdso(7)


2017-09-15

⚠️ **GitHub.com Fallback** ⚠️