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