pthread_atfork(3) - wariua/manpages-ko GitHub Wiki
pthread_atfork - ๋ถ๊ธฐ ํธ๋ค๋ฌ ๋ฑ๋กํ๊ธฐ
#include <pthread.h>
int pthread_atfork(void (*prepare)(void), void (*parent)(void),
void (*child)(void));
-pthread
๋ก ๋งํฌ.
pthread_atfork()
ํจ์๋ ์ด ์ค๋ ๋์์ fork(2)๋ฅผ ํธ์ถํ ๋ ์คํ๋ ๋ถ๊ธฐ ํธ๋ค๋ฌ๋ค์ ๋ฑ๋กํ๋ค. fork(2)๋ฅผ ํธ์ถํ๋ ์ค๋ ๋์ ๋ฌธ๋งฅ์์ ํธ๋ค๋ฌ๋ค์ด ์คํ๋๋ค.
์ธ ๊ฐ์ง ์ข ๋ฅ์ ํธ๋ค๋ฌ๋ฅผ ๋ฑ๋กํ ์ ์๋ค.
-
prepare
๋ fork(2) ์ฒ๋ฆฌ๊ฐ ์์๋๊ธฐ ์ ์ ์คํ๋๋ ํธ๋ค๋ฌ๋ฅผ ๋ํ๋ธ๋ค. -
parent
๋ fork(2) ์ฒ๋ฆฌ๊ฐ ๋๋ ํ ๋ถ๋ชจ ํ๋ก์ธ์ค์์ ์คํ๋๋ ํธ๋ค๋ฌ๋ฅผ ๋ํ๋ธ๋ค. -
child
๋ fork(2) ์ฒ๋ฆฌ๊ฐ ๋๋ ํ ์์ ํ๋ก์ธ์ค์์ ์คํ๋๋ ํธ๋ค๋ฌ๋ฅผ ๋ํ๋ธ๋ค.
ํด๋น fork(2) ์ฒ๋ฆฌ ๋จ๊ณ์ ํธ๋ค๋ฌ๊ฐ ํ์์น ์์ผ๋ฉด ์ธ ์ธ์ ์ค ์ด๋ ๊ฒ์ด๋ NULL์ผ ์ ์๋ค.
์ฑ๊ณต ์ pthread_atfork()
๋ 0์ ๋ฐํํ๋ค. ์ค๋ฅ ์ ์ค๋ฅ ๋ฒํธ๋ฅผ ๋ฐํํ๋ค. ํ ์ค๋ ๋๊ฐ pthread_atfork()
๋ฅผ ์ฌ๋ฌ ๋ฒ ํธ์ถํ์ฌ ๊ฐ ๋จ๊ณ์ ํธ๋ค๋ฌ๋ฅผ ์ฌ๋ฌ ๊ฐ ๋ฑ๋กํ ์๋ ์๋ค. ๊ฐ ๋จ๊ณ์ ํธ๋ค๋ฌ๋ค์ ์ ํด์ง ์์๋๋ก ํธ์ถ๋๋๋ฐ, prepare
ํธ๋ค๋ฌ๋ ๋ฑ๋ก ์ญ์์ผ๋ก ํธ์ถ๋๊ณ parent
๋ฐ child
ํธ๋ค๋ฌ๋ ๋ฑ๋กํ ์์๋๋ก ํธ์ถ๋๋ค.
ENOMEM
- ํธ๋ค๋ฌ ํญ๋ชฉ์ ๊ธฐ๋กํ๊ธฐ ์ํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ ์ ์๋ค.
POSIX.1-2001, POSIX.1-2008.
๋ค์ค ์ค๋ ๋ ํ๋ก์ธ์ค์์ fork(2)๋ฅผ ํธ์ถํ๋ฉด ํธ์ถ ์ค๋ ๋๋ง ์์ ํ๋ก์ธ์ค์ ๋ณต์ ๋๋ค. pthread_atfork()
์ ์๋ ์๋๋ ํธ์ถ ์ค๋ ๋๊ฐ ์ผ๊ด์ฑ ์๋ ์ํ๋ก ๋์๊ฐ ์ ์๊ฒ ํ๋ ๊ฒ์ด์๋ค. ์๋ฅผ ๋ค์ด ์์์ผ๋ก ๋ณต์ ๋๋ ์ฌ์ฉ์ ๊ณต๊ฐ ๋ฉ๋ชจ๋ฆฌ์์ ๋ณด์ด๋ ์ด๋ค ๋ฎคํ
์ค๋ฅผ fork(2) ํธ์ถ ์์ ์ ์ด๋ค ์ค๋ ๋๊ฐ ์ ๊ทผ ์ํ์ผ ์ ์๋ค. ์ ๊ทผ ์ค๋ ๋๊ฐ ์์์ผ๋ก ๋ณต์ ๋์ง ์์ผ๋ฏ๋ก ๊ทธ ๋ฎคํ
์ค๋ ์ ๋ ํ๋ฆฌ์ง ์์ ๊ฒ์ด๋ค. pthread_atfork()
์ ์๋๋ ์์ฉ(๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ)์์ ๋ฎคํ
์ค ๋ฐ ๊ธฐํ ํ๋ก์ธ์ค ๋ฐ ์ค๋ ๋ ์ํ๋ฅผ ์ผ๊ด์ฑ ์๋ ์ํ๋ก ๋ณต์์ํฌ ์ ์๋ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํ๋ ๊ฒ์ด์๋ค. ํ์ง๋ง ํ์ค์์๋ ์ผ๋ฐ์ ์ผ๋ก ๊ทธ ์์
์ด ๋๋ฌด ์ด๋ ค์์ ์คํ ๊ฐ๋ฅํ์ง ์๋ค.
๋ค์ค ์ค๋ ๋ ํ๋ก์ธ์ค์์ fork(2)๊ฐ ์์์์ ๋ฐํํ ํ์ execve(2)๋ฅผ ํธ์ถํด์ ์ ํ๋ก๊ทธ๋จ์ ์คํํ๊ฑฐ๋ ํ ๋๊น์ง ์์์์๋ ๋น๋๊ธฐ ์๊ทธ๋ ์์ ํจ์(signal-safety(7) ์ฐธ๊ณ )๋ง ํธ์ถํด์ผ ํ๋ค.
POSIX.1์์๋ pthread_atfork()
๊ฐ EINTR
์ค๋ฅ๋ก ์คํจํ์ง ์๋๋ค๊ณ ๋ช
์ธํ๋ค.
fork(2), atexit(3), pthreads(7)
2017-09-15