signal safety(7) - wariua/manpages-ko GitHub Wiki
signal-safety - λΉλκΈ° μκ·Έλ μμ ν¨μλ€
λΉλκΈ° μκ·Έλ μμ (async-signal-safe) ν¨μλ μκ·Έλ νΈλ€λ¬ μμμ μμ νκ² νΈμΆν μ μλ ν¨μμ΄λ€. λ§μ ν¨μλ€μ λΉλκΈ° μκ·Έλ μμ ν¨μκ° μλλ€. νΉν μ¬μ§μ κ°λ₯νμ§ μμ ν¨μλ€μ μΌλ°μ μΌλ‘ μκ·Έλ νΈλ€λ¬ μμμ νΈμΆνλ κ² μμ νμ§ μλ€.
λͺ¨λ ν¨μλ€μ΄ λΉλκΈ° μκ·Έλμ μμ νμ§ μμ stdio
λΌμ΄λΈλ¬λ¦¬ ꡬνμ μκ°ν΄ 보면 ν¨μλ₯Ό μμ νμ§ μκ² λ§λλ μ’
λ₯μ λ¬Έμ λ€μ κΈλ°© μ΄ν΄ν μ μλ€.
νμΌμ λν΄ λ²νΌλ§ I/Oλ₯Ό μνν λ stdio
ν¨μλ€μμλ μ μ ν λΉ λ°μ΄ν° λ²νΌμ ν¨κ» λ²νΌ λ΄ λ°μ΄ν° μκ³Ό νμ¬ μμΉλ₯Ό κΈ°λ‘νλ μ°κ³ μΉ΄μ΄ν° λ° μΈλ±μ€λ₯Ό (λλ ν¬μΈν°λ€μ) μ μ§ν΄μΌ νλ€. μ£Ό νλ‘κ·Έλ¨μ΄ printf(3) κ°μ stdio
ν¨μ νΈμΆ μ€μ μκ³ κ·Έ μμμ λ²νΌμ μ°κ΄ λ³μλ€μ λΆλΆμ μΌλ‘ κ°±μ νλ€κ³ νμ. λ§μ½ κ·Έ μκ°μ μκ·Έλ νΈλ€λ¬κ° νλ‘κ·Έλ¨μ μ€λ¨μν€κ³ νΈλ€λ¬μμ λ€μ printf(3)λ₯Ό νΈμΆνλ©΄ κ·Έ λ λ²μ§Έ printf(3) νΈμΆμ μΌκ΄μ μ΄μ§ μμ λ°μ΄ν°λ‘ λμνκ² λλ©° κ²°κ³Όκ° μμΈ‘ λΆκ°λ₯νλ€.
μμ νμ§ μμ ν¨μμ λ¬Έμ λ₯Ό νΌνλ €λ©΄ λ κ°μ§ μ νμ§κ° μλ€.
-
(a) μκ·Έλ νΈλ€λ¬μμ λΉλκΈ° μκ·Έλ μμ ν¨μλ§ νΈμΆνκ³ (b) μκ·Έλ νΈλ€λ¬ μμ²΄κ° μ£Ό νλ‘κ·Έλ¨μ μ μ λ³μλ€μ λν΄ μ¬μ§μ κ°λ₯μ΄κ² νλ€.
-
μ£Ό νλ‘κ·Έλ¨μμ μμ νμ§ μμ ν¨μλ₯Ό νΈμΆνκ±°λ μκ·Έλ νΈλ€λ¬μμλ μ κ·Όνλ μ μ λ°μ΄ν°λ₯Ό λ€λ£° λ μκ·Έλ μ λ¬μ λ§λλ€.
μΌλ°μ μΌλ‘ λ λ²μ§Έ μ νμ§λ μ¬νν 볡μ‘λμ νλ‘κ·Έλ¨μμλ μ΄λ ΅κΈ° λλ¬Έμ 첫 λ²μ§Έ μ νμ§λ₯Ό μ·¨νλ€.
POSIX.1μμλ ꡬνμμ λΉλκΈ° μκ·Έλ μμ μΌλ‘ λ§λ€μ΄μΌ νλ ν¨μλ€μ λͺ μΈνλ€. (μ΄λ€ ꡬνμμλ λ λ§μ ν¨μλ€μ μμ ν ꡬνμ μ 곡ν μλ μλ€. νμ§λ§ νμ€μμ μꡬνλ κ²μ΄ μλλ―λ‘ λ€λ₯Έ ꡬνμμλ κ°μ 보μ₯μ νμ§ μμ μλ μλ€.) μΌλ°μ μΌλ‘ ν¨μκ° λΉλκΈ° μκ·Έλμ μμ ν 건 μ¬μ§μ κ°λ₯νκ±°λ μκ·Έλμ λν΄ μμμ (μ¦ μκ·Έλ νΈλ€λ¬λ‘ μ€νμ μ€λ¨μν¬ μ μμ)μ΄μ΄μμ΄λ€.
POSIX.1μμ λΉλκΈ° μκ·Έλ μμ μ΄κΈ°λ₯Ό μꡬνλ ν¨μλ€μ΄ μλ νμ μλ€. λ³λ€λ₯Έ μΈκΈμ΄ μλ ν¨μλ POSIX.1-2001μμ λΉλκΈ° μκ·Έλ μμ μ μꡬν κ²μ΄λ©°, νμ νμ€μμ λ°λ λ΄μ©μ΄ μ ν μλ€.
ν¨μ | μ°Έκ³ |
---|---|
abort(3) | POSIX.1-2003μμ μΆκ° |
accept(2) |
|
access(2) | |
aio_error(3) | |
aio_return(3) | |
aio_suspend(3) | μλ μ°Έκ³ |
alarm(2) | |
bind(2) |
|
cfgetispeed(3) | |
cfgetospeed(3) | |
cfsetispeed(3) | |
cfsetospeed(3) | |
chdir(2) | |
chmod(2) | |
chown(2) | |
clock_gettime(2) | |
close(2) | |
connect(2) |
|
creat(2) | |
dup(2) | |
dup2(2) | |
execl(3) | POSIX.1-2008μμ μΆκ°. μλ μ°Έκ³ |
execle(3) | μλ μ°Έκ³ |
execv(3) | POSIX.1-2008μμ μΆκ° |
execve(2) | |
_exit(2) | |
_Exit(2) | |
faccessat(2) | POSIX.1-2008μμ μΆκ° |
fchdir(2) | POSIX.1-2013μμ μΆκ° |
fchmod(2) | |
fchmodat(2) | POSIX.1-2008μμ μΆκ° |
fchown(2) | |
fchownat(2) | POSIX.1-2008μμ μΆκ° |
fcntl(2) | |
fdatasync(2) | |
fexecve(3) | POSIX.1-2008μμ μΆκ° |
ffs(3) | POSIX.1-2016μμ μΆκ° |
fork(2) | μλ μ°Έκ³ |
fstat(2) | |
fstatat(2) | POSIX.1-2008μμ μΆκ° |
fsync(2) | |
ftruncate(2) | |
futimens(3) | POSIX.1-2008μμ μΆκ° |
getegid(2) | |
geteuid(2) | |
getgid(2) | |
getgroups(2) | |
getpeername(2) | |
getpgrp(2) | |
getpid(2) | |
getppid(2) | |
getsockname(2) | |
getsockopt(2) |
|
getuid(2) | |
htonl(3) | POSIX.1-2016μμ μΆκ° |
htons(3) | POSIX.1-2016μμ μΆκ° |
kill(2) | |
link(2) | |
linkat(2) | POSIX.1-2008μμ μΆκ° |
listen(2) |
|
longjmp(3) | POSIX.1-2016μμ μΆκ°, μλ μ°Έκ³ |
lseek(2) | |
lstat(2) | |
memccpy(3) | POSIX.1-2016μμ μΆκ° |
memchr(3) | POSIX.1-2016μμ μΆκ° |
memcmp(3) |
POSIX.1-2016μμ μΆκ° |
memcpy(3) |
POSIX.1-2016μμ μΆκ° |
memmove(3) |
POSIX.1-2016μμ μΆκ° |
memset(3) |
POSIX.1-2016μμ μΆκ° |
mkdir(2) | |
mkdirat(2) | POSIX.1-2008μμ μΆκ° |
mkfifo(3) | |
mkfifoat(3) | POSIX.1-2008μμ μΆκ° |
mknod(2) | POSIX.1-2008μμ μΆκ° |
mknodat(2) | POSIX.1-2008μμ μΆκ° |
ntohl(3) | POSIX.1-2016μμ μΆκ° |
ntohs(3) | POSIX.1-2016μμ μΆκ° |
open(2) | |
openat(2) | POSIX.1-2008μμ μΆκ° |
pause(2) | |
pipe(2) | |
poll(2) | |
posix_trace_event(3) |
|
pselect(2) | |
pthread_kill(3) | POSIX.1-2013μμ μΆκ° |
pthread_self(3) | POSIX.1-2013μμ μΆκ° |
pthread_sigmask(3) | POSIX.1-2013μμ μΆκ° |
raise(3) | |
read(2) |
|
readlink(2) | |
readlinkat(2) | POSIX.1-2008μμ μΆκ° |
recv(2) | |
recvfrom(2) | |
recvmsg(2) | |
rename(2) | |
renameat(2) | POSIX.1-2008μμ μΆκ° |
rmdir(2) | |
select(2) | |
sem_post(3) | |
send(2) | |
sendmsg(2) | |
sendto(2) | |
setgid(2) | |
setpgid(2) | |
setsid(2) | |
setsockopt(2) |
|
setuid(2) | |
shutdown(2) | |
sigaction(2) | |
sigaddset(3) | |
sigdelset(3) | |
sigemptyset(3) | |
sigfillset(3) | |
sigismember(3) | |
siglongjmp(3) | POSIX.1-2016μμ μΆκ°, μλ μ°Έκ³ |
signal(2) | |
sigpause(3) | |
sigpending(2) | |
sigprocmask(2) | |
sigqueue(2) | |
sigset(3) | |
sigsuspend(2) | |
sleep(3) | |
sockatmark(3) | POSIX.1-2004μμ μΆκ° |
socket(2) | |
socketpair(2) | |
stat(2) | |
stpcpy(3) | POSIX.1-2016μμ μΆκ° |
stpncpy(3) | POSIX.1-2016μμ μΆκ° |
strcat(3) |
POSIX.1-2016μμ μΆκ° |
strchr(3) |
POSIX.1-2016μμ μΆκ° |
strcmp(3) |
POSIX.1-2016μμ μΆκ° |
strcpy(3) |
POSIX.1-2016μμ μΆκ° |
strcspn(3) |
POSIX.1-2016μμ μΆκ° |
strlen(3) |
POSIX.1-2016μμ μΆκ° |
strncat(3) |
POSIX.1-2016μμ μΆκ° |
strncmp(3) |
POSIX.1-2016μμ μΆκ° |
strncpy(3) |
POSIX.1-2016μμ μΆκ° |
strnlen(3) | POSIX.1-2016μμ μΆκ° |
strpbrk(3) |
POSIX.1-2016μμ μΆκ° |
strrchr(3) |
POSIX.1-2016μμ μΆκ° |
strspn(3) |
POSIX.1-2016μμ μΆκ° |
strstr(3) |
POSIX.1-2016μμ μΆκ° |
strtok_r(3) | POSIX.1-2016μμ μΆκ° |
symlink(2) | |
symlinkat(2) | POSIX.1-2008μμ μΆκ° |
tcdrain(3) | |
tcflow(3) | |
tcflush(3) | |
tcgetattr(3) | |
tcgetpgrp(3) | |
tcsendbreak(3) | |
tcsetattr(3) | |
tcsetpgrp(3) | |
time(2) | |
timer_getoverrun(2) | |
timer_gettime(2) | |
timer_settime(2) | |
times(2) | |
umask(2) | |
uname(2) | |
unlink(2) | |
unlinkat(2) | POSIX.1-2008μμ μΆκ° |
utime(2) | |
utimensat(2) | POSIX.1-2008μμ μΆκ° |
utimes(2) | POSIX.1-2008μμ μΆκ° |
wait(2) | |
waitpid(2) | |
wcpcpy(3) |
POSIX.1-2016μμ μΆκ° |
wcpncpy(3) |
POSIX.1-2016μμ μΆκ° |
wcscat(3) |
POSIX.1-2016μμ μΆκ° |
wcscat(3) |
POSIX.1-2016μμ μΆκ° |
wcschr(3) |
POSIX.1-2016μμ μΆκ° |
wcscmp(3) |
POSIX.1-2016μμ μΆκ° |
wcscpy(3) |
POSIX.1-2016μμ μΆκ° |
wcscspn(3) |
POSIX.1-2016μμ μΆκ° |
wcslen(3) |
POSIX.1-2016μμ μΆκ° |
wcsncat(3) |
POSIX.1-2016μμ μΆκ° |
wcsncmp(3) |
POSIX.1-2016μμ μΆκ° |
wcsncpy(3) |
POSIX.1-2016μμ μΆκ° |
wcsnlen(3) |
POSIX.1-2016μμ μΆκ° |
wcspbrk(3) |
POSIX.1-2016μμ μΆκ° |
wcsrchr(3) |
POSIX.1-2016μμ μΆκ° |
wcsspn(3) |
POSIX.1-2016μμ μΆκ° |
wcsstr(3) |
POSIX.1-2016μμ μΆκ° |
wcstok(3) |
POSIX.1-2016μμ μΆκ° |
wmemchr(3) |
POSIX.1-2016μμ μΆκ° |
wmemcmp(3) |
POSIX.1-2016μμ μΆκ° |
wmemcpy(3) |
POSIX.1-2016μμ μΆκ° |
wmemmove(3) |
POSIX.1-2016μμ μΆκ° |
wmemset(3) |
POSIX.1-2016μμ μΆκ° |
write(2) |
μ°Έκ³ :
-
POSIX.1-2001κ³Ό POSIX.1-2004μμλ fpathconf(3), pathconf(3), sysconf(3)κ° λΉλκΈ° μκ·Έλ μμ μ΄κΈ°λ₯Ό μꡬνμ§λ§ POSIX.1-2008μμ μ΄ μκ΅¬κ° μ κ±°λμλ€.
-
μμ νμ§ μμ ν¨μμ μ€νμ΄ μκ·Έλ νΈλ€λ¬λ‘ μ€λ¨λκ³ , κ·Έ νΈλ€λ¬κ° longjmp(3)λ siglongjmp(3) νΈμΆμ ν΅ν΄ λλκ³ , μ΄ν νλ‘κ·Έλ¨μμ μμ νμ§ μμ ν¨μλ₯Ό νΈμΆνλ κ²½μ°μ νλ‘κ·Έλ¨μ λμ λ°©μμ΄ κ·μ λμ΄ μμ§ μλ€.
-
POSIX.1-2003μμλ μμ©μ΄ μκ·Έλ νΈλ€λ¬μμ fork(2)λ₯Ό νΈμΆνκ³ pthread_atfork(3) νΈμΆλ‘ λ±λ‘ν ν¬ν¬ νΈλ€λ¬μμ λΉλκΈ° μκ·Έλμ μμ νμ§ μμ ν¨μλ₯Ό νΈμΆνλ κ²½μ° λμ λ°©μμ΄ κ·μ λμ΄ μμ§ μμμ λΆλͺ ν νμλ€. κ·Έ νμ€μ ν₯ν 리λΉμ μμ fork(2)λ₯Ό λΉλκΈ° μκ·Έλ μμ ν¨μ λͺ©λ‘μμ μ κ±°ν κ°λ₯μ±μ΄ λλ€.
GNU C λΌμ΄λΈλ¬λ¦¬μ λ€μκ³Ό κ°μ νμ€ μΌνμ΄ μλ€.
-
glibc 2.24 μ μμ execl(3)κ³Ό execle(3)μ΄ λ΄λΆμ μΌλ‘ realloc(3)μ μ΄μ©νκ³ κ·Έλ‘ μΈν΄ λΉλκΈ° μκ·Έλ μμ μ΄ μλμλ€. glibc 2.24μμ μμ λμλ€.
-
glibcμ aio_suspend(3) ꡬνμ΄ λ΄λΆμ μΌλ‘ pthread_mutex_lock(3)μ μ¬μ©νκΈ° λλ¬Έμ λΉλκΈ° μκ·Έλ μμ μ΄ μλλ€.
sigaction(2), signal(7), standards(7)
2017-03-13