์ด์ ์ฒด์ ์๊ฐ
ํค์ด ํ๋ธ๋ฅด! ์ ์๊ฐ์๋ ํฅ๋ฏธ๋ก์ด ๋ฌธํ ์ธ OSTEP์ ๋ํ ์ผ๋ จ์ ๊ธฐ์ฌ ๋ฒ์ญ์ ์ฌ๋ฌ๋ถ์ ๊ด์ฌ์ ๋๊ณ ์ถ์ต๋๋ค. ์ด ์๋ฃ๋ ์ ๋์ค ๊ณ์ด ์ด์ ์ฒด์ ์ ์์
, ์ฆ ํ๋ก์ธ์ค, ๋ค์ํ ์ค์ผ์ค๋ฌ, ๋ฉ๋ชจ๋ฆฌ ๋ฐ ์ต์ OS๋ฅผ ๊ตฌ์ฑํ๋ ๊ธฐํ ์ ์ฌํ ๊ตฌ์ฑ ์์ ์์
์ ๋ํด ๋งค์ฐ ๊น์ด ๋
ผ์ํฉ๋๋ค. ์ฌ๊ธฐ์์ ๋ชจ๋ ์๋ฃ์ ์๋ณธ์ ๋ณผ ์ ์์ต๋๋ค.
์ด ์ฃผ์ ์ ๋ํ ์ฐ๊ตฌ์ค ์์ ์ ์ฌ๊ธฐ์์ ์ฐพ์ ์ ์์ต๋๋ค.
๊ธฐํ ๋ถํ :
์์ ๋ด ์ฑ๋์ ํ์ธํ ์๋ ์์ต๋๋ค.
๊ฒฝ๋ณด! ์ด๋ฒ ๊ฐ์๋ฅผ ์ํ ์ค์ต์ค์ด ์์ต๋๋ค! ๋ฐ๋ผ๋ณด๋ค
ํ๋ก์ธ์ค API
UNIX ์์คํ ์์ ํ๋ก์ธ์ค๋ฅผ ์์ฑํ๋ ์๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค. ๋ ๊ฐ์ ์์คํ ํธ์ถ์ ํตํด ๋ฐ์ํฉ๋๋ค. ํฌํฌ() ะธ exec ().
ํฌํฌ() ํธ์ถ
fork() ํธ์ถ์ ์ํํ๋ ํ๋ก๊ทธ๋จ์ ์๊ฐํด ๋ณด์ญ์์ค. ์คํ ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๋จผ์ main() ํจ์๋ฅผ ์
๋ ฅํ๊ณ ๋ฌธ์์ด์ ํ๋ฉด์ ์ธ์ํฉ๋๋ค. ์ด ์ค์๋ ์๋ณธ์์ ํธ์ถ๋ ํ๋ก์ธ์ค ์๋ณ์๊ฐ ํฌํจ๋์ด ์์ต๋๋ค. PID ๋๋ ํ๋ก์ธ์ค ์๋ณ์. ์ด ์๋ณ์๋ UNIX์์ ํ๋ก์ธ์ค๋ฅผ ์ฐธ์กฐํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ๋ค์ ๋ช
๋ น์ fork()๋ฅผ ํธ์ถํฉ๋๋ค. ์ด ์์ ์์ ํ๋ก์ธ์ค์ ๊ฑฐ์ ์ ํํ ๋ณต์ฌ๋ณธ์ด ์์ฑ๋ฉ๋๋ค. OS์ ๊ฒฝ์ฐ ์์คํ
์์ ์คํ ์ค์ธ ๋์ผํ ํ๋ก๊ทธ๋จ์ ๋ณต์ฌ๋ณธ์ด 2๊ฐ ์๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๋ฉฐ ๊ฒฐ๊ณผ์ ์ผ๋ก fork() ํจ์๊ฐ ์ข
๋ฃ๋ฉ๋๋ค. ์๋ก ์์ฑ๋ ํ์ ํ๋ก์ธ์ค(์ด๋ฅผ ์์ฑํ ์์ ํ๋ก์ธ์ค์ ๊ด๋ จํ์ฌ)๋ main() ํจ์์์ ์์ํ์ฌ ๋ ์ด์ ์คํ๋์ง ์์ต๋๋ค. ํ์ ํ๋ก์ธ์ค๋ ์์ ํ๋ก์ธ์ค์ ์ ํํ ๋ณต์ฌ๋ณธ์ด ์๋๋ผ๋ ์ ์ ๊ธฐ์ตํด์ผ ํฉ๋๋ค. ํนํ ์์ฒด ์ฃผ์ ๊ณต๊ฐ, ์์ฒด ๋ ์ง์คํฐ, ์คํ ๊ฐ๋ฅํ ๋ช
๋ น์ ๋ํ ์์ฒด ํฌ์ธํฐ ๋ฑ์ ๊ฐ์ต๋๋ค. ๋ฐ๋ผ์, fork() ํจ์ ํธ์ถ์์๊ฒ ๋ฐํ๋๋ ๊ฐ์ ๋ฌ๋ผ์ง๋๋ค. ํนํ ์์ ํ๋ก์ธ์ค๋ ํ์ ํ๋ก์ธ์ค์ PID ๊ฐ์ ๋ฐํ์ผ๋ก ๋ฐ๊ณ ํ์ ํ๋ก์ธ์ค๋ 0๊ณผ ๊ฐ์ ๊ฐ์ ๋ฐ๊ฒ ๋ฉ๋๋ค. ์ด๋ฌํ ๋ฐํ ์ฝ๋๋ฅผ ์ฌ์ฉํ๋ฉด ํ๋ก์ธ์ค๋ฅผ ๋ถ๋ฆฌํ๊ณ ๊ฐ ํ๋ก์ธ์ค๊ฐ ์์ฒด ์์
์ ์ํํ๋๋ก ํ ์ ์์ต๋๋ค. . ๊ทธ๋ฌ๋ ์ด ํ๋ก๊ทธ๋จ์ ์คํ์ ์๊ฒฉํ๊ฒ ์ ์๋์ด ์์ง ์์ต๋๋ค. 2๊ฐ์ ํ๋ก์ธ์ค๋ก ๋ถํ ๋ ํ OS๋ ํ๋ก์ธ์ค๋ฅผ ๋ชจ๋ํฐ๋งํ๊ณ ์์
์ ๊ณํํ๊ธฐ ์์ํฉ๋๋ค. ๋จ์ผ ์ฝ์ด ํ๋ก์ธ์์์ ์คํ๋๋ ๊ฒฝ์ฐ ํ๋ก์ธ์ค ์ค ํ๋(์ด ๊ฒฝ์ฐ ์์ ํ๋ก์ธ์ค)๊ฐ ๊ณ์ ์๋ํ๊ณ ํ์ ํ๋ก์ธ์ค๊ฐ ์ ์ด๊ถ์ ๋ฐ์ต๋๋ค. ๋ค์ ์์ํ๋ฉด ์ํฉ์ด ๋ฌ๋ผ์ง ์ ์์ต๋๋ค.
ํตํ ๋๊ธฐ()
๋ค์ ํ๋ก๊ทธ๋จ์ ๊ณ ๋ คํด๋ณด์ธ์. ์ด ํ๋ก๊ทธ๋จ์์๋ ํตํ๊ฐ ์๊ธฐ ๋๋ฌธ์ ๊ธฐ๋ค๋ฆผ() ์์ ํ๋ก์ธ์ค๋ ํญ์ ํ์ ํ๋ก์ธ์ค๊ฐ ์๋ฃ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฝ๋๋ค. ์ด ๊ฒฝ์ฐ ํ๋ฉด์๋ ์๊ฒฉํ๊ฒ ์ ์๋ ํ
์คํธ ์ถ๋ ฅ์ด ํ์๋ฉ๋๋ค.
exec() ํธ์ถ
๋์ ์ ๊ณ ๋ คํด๋ณด์ธ์ exec (). ์ด ์์คํ
ํธ์ถ์ ์์ ํ ๋ค๋ฅธ ํ๋ก๊ทธ๋จ์ ์คํํ๋ ค๊ณ ํ ๋ ์ ์ฉํฉ๋๋ค. ์ฌ๊ธฐ์ ์ฐ๋ฆฌ๋ ์ ํํ ๊ฒ์ด๋ค execvp() ๋จ์ด ์ธ๊ธฐ ํ๋ก๊ทธ๋จ์ธ wc ํ๋ก๊ทธ๋จ์ ์คํํฉ๋๋ค. exec()๊ฐ ํธ์ถ๋๋ฉด ์ด๋ป๊ฒ ๋๋์? ์ด ํธ์ถ์๋ ์คํ ํ์ผ ์ด๋ฆ๊ณผ ์ผ๋ถ ๋งค๊ฐ๋ณ์๊ฐ ์ธ์๋ก ์ ๋ฌ๋ฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ์ด ์คํ ํ์ผ์ ์ฝ๋์ ์ ์ ๋ฐ์ดํฐ๊ฐ ๋ก๋๋๊ณ ์ฝ๋๊ฐ ํฌํจ๋ ์์ฒด ์ธ๊ทธ๋จผํธ๋ฅผ ๋ฎ์ด์๋๋ค. ์คํ, ํ ๋ฑ ๋๋จธ์ง ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๋ค์ ์ด๊ธฐํ๋ฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ OS๋ ๋จ์ํ ํ๋ก๊ทธ๋จ์ ์คํํ๊ณ ์ผ๋ จ์ ์ธ์๋ฅผ ์ ๋ฌํฉ๋๋ค. ๊ทธ๋์ ์ฐ๋ฆฌ๋ ์๋ก์ด ํ๋ก์ธ์ค๋ฅผ ๋ง๋ค์ง ์๊ณ ๋จ์ํ ํ์ฌ ์คํ ์ค์ธ ํ๋ก๊ทธ๋จ์ ๋ค๋ฅธ ์คํ ํ๋ก๊ทธ๋จ์ผ๋ก ๋ณํํ์ต๋๋ค. ์์์์ exec() ํธ์ถ์ ์คํํ ํ ์๋ ํ๋ก๊ทธ๋จ์ด ์ ํ ์คํ๋์ง ์์ ๊ฒ์ฒ๋ผ ๋ํ๋ฉ๋๋ค.
์ด ์์ ํฉ๋ณ์ฆ์ Unix ์ ธ์์ ์์ ํ ์ ์์ ์ด๋ฉฐ ํด๋น ์ ธ์ด ํธ์ถ ํ ์ฝ๋๋ฅผ ์คํํ ์ ์๋๋ก ํฉ๋๋ค. ํฌํฌ(), ํ์ง๋ง ํตํํ๊ธฐ ์ ์ exec (). ์ด๋ฌํ ์ฝ๋์ ์๋ก๋ ํ๋ก๊ทธ๋จ์ ์์ํ๊ธฐ ์ ์ ์์๋๋ ํ๋ก๊ทธ๋จ์ ์๊ตฌ์ ๋ง๊ฒ ์ ธ ํ๊ฒฝ์ ์กฐ์ ํ๋ ๊ฒ์ ๋๋ค.
๊ป์ง - ๋จ์ง ์ฌ์ฉ์ ํ๋ก๊ทธ๋จ์ผ ๋ฟ์ ๋๋ค. ๊ทธ๋ ๋ ๋น์ ์๊ฒ ์ด๋์ฅ์ ๋ณด์ฌ์ฃผ๊ณ ๋น์ ์ด ๊ฑฐ๊ธฐ์ ๋ฌด์ธ๊ฐ๋ฅผ ์ฐ๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฝ๋๋ค. ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ๊ฑฐ๊ธฐ์ ํ๋ก๊ทธ๋จ ์ด๋ฆ์ ์ฐ๋ฉด ์์ ํด๋น ์์น๋ฅผ ์ฐพ๊ณ , fork() ๋ฉ์๋๋ฅผ ํธ์ถํ ๋ค์, ์ผ๋ถ ์ ํ์ exec()๋ฅผ ํธ์ถํ์ฌ ์ ํ๋ก์ธ์ค๋ฅผ ์์ฑํ๊ณ ํ๋ก์ธ์ค๊ฐ ์๋ฃ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฝ๋๋ค. ๋๊ธฐ() ํธ์ถ. ํ์ ํ๋ก์ธ์ค๊ฐ ์ข ๋ฃ๋๋ฉด ์์ wait() ํธ์ถ์์ ๋์์ ํ๋กฌํํธ๋ฅผ ๋ค์ ์ธ์ํ๊ณ ๋ค์ ๋ช ๋ น์ด ์ ๋ ฅ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฝ๋๋ค.
fork() & exec() ๋ถํ ์ ํตํด ์์ ๋ค์๊ณผ ๊ฐ์ ์์
์ ์ํํ ์ ์์ต๋๋ค.
wc ํ์ผ > new_file.
์ด ์์์๋ wc ํ๋ก๊ทธ๋จ์ ์ถ๋ ฅ์ด ํ์ผ๋ก ๋ฆฌ๋๋ ์ ๋ฉ๋๋ค. ์์ด ์ด๋ฅผ ๋ฌ์ฑํ๋ ๋ฐฉ๋ฒ์ ๋งค์ฐ ๊ฐ๋จํฉ๋๋ค. ํธ์ถํ๊ธฐ ์ ์ ํ์ ํ๋ก์ธ์ค๋ฅผ ์์ฑํ๋ ๊ฒ์ ๋๋ค. exec (), ์์ ํ์ค ์ถ๋ ฅ์ ๋ซ๊ณ ํ์ผ์ ์ฝ๋๋ค. ์๋ก์ด ํ์ผ, ๋ฐ๋ผ์ ์ถ๊ฐ ์คํ ํ๋ก๊ทธ๋จ์ ๋ชจ๋ ์ถ๋ ฅ wc ํ๋ฉด ๋์ ํ์ผ๋ก ๋ฆฌ๋๋ ์ ๋ฉ๋๋ค.
์ ๋์ค ํ์ดํ ํ์ดํ() ํธ์ถ์ ์ฌ์ฉํ๋ค๋ ์ฐจ์ด์ ์ ์ ์ธํ๊ณ ๋น์ทํ ๋ฐฉ์์ผ๋ก ๊ตฌํ๋ฉ๋๋ค. ์ด ๊ฒฝ์ฐ ํ๋ก์ธ์ค์ ์ถ๋ ฅ ์คํธ๋ฆผ์ ์ปค๋์ ์๋ ํ์ดํ ํ์ ์ฐ๊ฒฐ๋๋ฉฐ, ์ฌ๊ธฐ์ ๋ค๋ฅธ ํ๋ก์ธ์ค์ ์
๋ ฅ ์คํธ๋ฆผ์ด ์ฐ๊ฒฐ๋ฉ๋๋ค.
์ถ์ฒ : habr.com