<aside> ๐ก waitpid() ํน์ ์์ ํ๋ก์ธ์ค๊ฐ ์ข ๋ฃ๋ ๋๊น์ง ๋๊ธฐ
</aside>
waitpid()
ํจ์๋ wait()
ํจ์์ฒ๋ผ ์์ ํ๋ก์ธ์ค๊ฐ ์ข
๋ฃ๋ ๋๊ฐ์ง ๋๊ธฐํ๋ค. ์ฐจ์ด์ ์ wait() ํจ์๋ ์์ ํ๋ก์ธ์ค ์ค ์ด๋ ํ๋๋ผ๋ ์ข
๋ฃ๋๋ฉด ๋ณต๊ท๋์ง๋ง(๋๊ธฐ์์ ํ๋ฆฌ์ง๋ง), waitpid()
๋ ํน์ ์์ ํ๋ก์ธ์ค๊ฐ ์ข
๋ฃ๋ ๋๊น์ง ๋๊ธฐํ๋ค.
๋ํ wait() ํจ์๋ ์์ ํ๋ก์ธ์ค๊ฐ ์ข
๋ฃ๋ ๋๊น์ง block ๋์ง๋ง waitpid()
ํจ์๋ WNOHANG
์ต์
์ ์ฌ์ฉํ์ฌ block ๋์ง ์๊ณ ๋ค๋ฅธ ์์
์ ์งํํ ์ ์๋ค.
waitpid ํจ์๋ ์ธ์๋ก ์ฃผ์ด์ง pid ๋ฒํธ์ ์์ ํ๋ก์ธ์ค๊ฐ ์ข ๋ฃ๋๊ฑฐ๋, ์๊ทธ๋ ํจ์๋ฅผ ํธ์ถํ๋ ์ ํธ๊ฐ ์ ๋ฌ๋ ๋๊น์ง waitpid ํธ์ถํ ์์ญ์์ ์ผ์ ์ค์ง ๋๋๋ค.
๋ง์ผ pid๋ก ์ง์ ๋ ์์์ด waitpid ํจ์ ํธ์ถ ์ ์ ์ด๋ฏธ ์ข
๋ฃ๋์๋ค๋ฉด, ํจ์๋ ์ฆ์ ๋ฆฌํดํ๊ณ ์์ ํ๋ก์ธ์ค๋ ์ข๋น ํ๋ก์ธ์ค
๋ก ๋จ๋๋ค.
pid์ ๊ฐ์ ๋ค์ ์ค ํ๋๊ฐ ๋๋ค.
pid < -1
: ํ๋ก์ธ์ค ๊ทธ๋ฃน ID๊ฐ pid์ ์ ๋๊ฐ๊ณผ ๊ฐ์ ์์ ํ๋ก์ธ์ค๋ฅผ ๊ธฐ๋ค๋ฆฐ๋ค.pid == -1
: ์์์ ์์ ํ๋ก์ธ์ค๋ฅผ ๊ธฐ๋ค๋ฆฐ๋ค. ์ด๊ฒ์ wait(2)์ ๋์ผํ๋ค.pid == 0
: ํ๋ก์ธ์ค ๊ทธ๋ฃน ID๊ฐ ํธ์ถ ํ๋ก์ธ์ค์ ID์ ๊ฐ์ ์์ ํ๋ก์ธ์ค๋ฅผ ๊ธฐ๋ค๋ฆฐ๋ค.pid > 0
: ํ๋ก์ธ์ค ID๊ฐ pid์ ๊ฐ๊ณผ ๊ฐ์ ์์ ํ๋ก์ธ์ค๋ฅผ ๊ธฐ๋ค๋ฆฐ๋ค. options์ ๊ฐ์ 0์ด๊ฑฐ๋ ๋ค์ ๊ฐ๋ค๊ณผ์ OR์ด๋ค. (???)์ข ๋ฃ๋ ์์ ํ๋ก์ธ์ค์ ID๋ ์๋ฌ์ผ ๋ -1์ ๋ฐํํ๊ณ , ๋ง์ผ ์ด๋ค ์์๋ ์ด์ฉํ ์ ์๋ค๋ฉด 0์ ๋ฐํํ๋ค.
pid_t waitpid(pid_t pid, int *status, int options);