restart_syscall(2) - wariua/manpages-ko GitHub Wiki
restart_syscall - μ μ§ μκ·Έλλ‘ μ€λ¨λ ν μμ€ν νΈμΆ μ¬μμ νκΈ°
int restart_syscall(void);
μ£Όμ: μ΄ μμ€ν νΈμΆμ λν glibc λνΌκ° μλ€. NOTES μ°Έκ³ .
μκ·Έλ(κ°λ Ή SIGSTOP
μ΄λ SIGTSTP
)μ μν΄ μ μ§λλ νλ‘μΈμ€κ° μ΄ν SIGCONT
μκ·Έλμ μμ νμ¬ μ¬κ°λ νμ νΉμ μμ€ν
νΈμΆλ€μ μ¬μμνκΈ° μν΄ restart_syscall()
μ μ¬μ©νλ€. μ΄ μμ€ν
νΈμΆμ 컀λ λ΄λΆ μ©λλ‘λ§ μ€κ³λ κ²μ΄λ€.
μ¬μμ λ μκ° κ΄λ ¨ λ§€κ°λ³μλ₯Ό μ‘°μ ν΄μΌ νλ μμ€ν
νΈμΆλ€μ μ¬μμ νλ λ°μλ§ restart_syscall()
μ μ¬μ©νλ€. λ§νμλ©΄ poll(2) (리λ
μ€ 2.6.24λΆν°), nanosleep(2) (리λ
μ€ 2.6λΆν°), clock_nanosleep(2) (리λ
μ€ 2.6λΆν°), κ·Έλ¦¬κ³ futex(2)λ₯Ό FUTEX_WAIT
(리λ
μ€ 2.6.22λΆν°) λ° FUTEX_WAIT_BITSET
(리λ
μ€ 2.6.31λΆν°)μΌλ‘ μΈ λμ΄λ€. restart_syscall()
μ (μκ·Έλμ μν΄ νλ‘μΈμ€κ° μ μ§λμ΄ μλ μκ°λ₯Ό ν¬ν¨ν΄) μ΄λ―Έ μ§λ μκ°μ κ³ λ €ν΄ μ μ ν μ‘°μ ν μκ° μΈμλ₯Ό κ°μ§κ³ μ€λ¨λλ μμ€ν
νΈμΆμ μ¬μμ νλ€. restart_syscall()
λ©μ»€λμ¦μ΄ μλ€λ©΄ νλ‘μΈμ€κ° μ€νμ μννμ λ μ΄ μμ€ν
νΈμΆλ€μ μ¬μμ νλ©΄μ μ΄λ―Έ μ§λ μκ°μ μ νν μ νμ§ λͺ»ν κ²μ΄λ€.
restart_syscall()
μ λ°ν κ°μ μ¬μμ νλ κ·Έ μμ€ν
νΈμΆμ λ°ν κ°μ΄λ€.
restart_syscall()
λ‘ μ¬μμ νλ κ·Έ μμ€ν
νΈμΆμμμ μ€λ₯μ λ°λΌμ errno
κ° μ€μ λλ€.
리λ
μ€ 2.6λΆν° restart_syscall()
μμ€ν
νΈμΆμ΄ μ‘΄μ¬νλ€.
μ΄ μμ€ν νΈμΆμ 리λ μ€ μ μ©μ΄λ€.
μ΄ μμ€ν νΈμΆμ λν glibc λνΌκ° μλ€. 컀λμμλ§ μ°κΈ° μν κ²μ΄κ³ μμ©μμλ μ λ νΈμΆνμ§ λ§μμΌ νλ νΈμΆμ΄κΈ° λλ¬Έμ΄λ€.
νλ‘μΈμ€κ° μκ·Έλμ μν΄ μ μ§λμλ€κ° SIGCONT
μ μν΄ μ¬κ°λ ν μμ€ν
νΈμΆμ μ¬μμν λ νλ‘μΈμ€κ° μ μ§ μνμμ λ³΄λΈ μκ°μ΄ μλ μμ€ν
νΈμΆμ μ§μ νλ νμμμ μκ°μμ λΉ μ§λλ‘ νκΈ° μν΄ μ»€λμμ restart_syscall()
μ μ¬μ©νλ€. μμ€ν
νΈμΆμμ νμμμ μΈμλ₯Ό λ°μΌλ©° μ μ§ μκ·Έλ λ° SIGCONT
νμ μλμΌλ‘ μ¬μμ νμ§λ§ restart_syscall()
λ©μ»€λμ¦μ λ΄μ₯νκ³ μμ§ μμ κ²½μ°μλ νλ‘μΈμ€κ° μ μ§ μνλ‘ λ³΄λΈ μκ°μ΄ νμμμ κ°μμ λΉ μ§μ§ μλλ€. μ΄λ° λ¬Έμ λ₯Ό κ²ͺλ μ£Όμ μμ€ν
νΈμΆλ€λ‘ ppoll(2), select(2), pselect(2)κ° μλ€.
μ¬μ©μ 곡κ°μκ²λ restart_syscall()
μ λμμ΄ κ±°μ 보μ΄μ§ μλλ€. μ¬μμ λλ μμ€ν
νΈμΆμ λΆλ λ νλ‘μΈμ€μκ²λ μμ€ν
νΈμΆμ΄ νμμ²λΌ μ€νλκ³ λ°νν κ²μ²λΌ 보μΈλ€.
sigaction(2), sigreturn(2), signal(7)
2017-09-15