
ํ๋ก์ธ์ค ๊ณ์ธต ๊ตฌ์กฐ
ํ๋ก์ธ์ค ๊ณ์ธต ๊ตฌ์กฐ๋ ์ด์์ฒด์ ์์ ํ๋ก์ธ์ค๋ค ๊ฐ์ ๊ด๊ณ๋ฅผ ๋ํ๋ด๋ ๋ฐฉ๋ฒ์ ๋งํฉ๋๋ค. ์ด์์ฒด์ ๋ ์ฌ๋ฌ ํ๋ก์ธ์ค๋ค์ ๊ด๋ฆฌํ๊ณ ์ด๋ค ๊ฐ์ ์ํธ์์ฉ์ ์กฐ์จํ๋๋ฐ, ์ด๋ฌํ ํ๋ก์ธ์ค๋ค์ ์ข
์ข
๊ณ์ธต์ ์ธ ๊ตฌ์กฐ๋ฅผ ํ์ฑํฉ๋๋ค. ์ด ๊ตฌ์กฐ๋ ์ผ๋ฐ์ ์ผ๋ก ๋ถ๋ชจ-์์ ๊ด๊ณ๋ก ๋ํ๋ผ ์ ์์ต๋๋ค.
1. ๋ถ๋ชจ ํ๋ก์ธ์ค(Parent Process): ์ด์์ฒด์ ์์ ์๋ก์ด ํ๋ก์ธ์ค๋ฅผ ์์ฑํ ๋, ๋ถ๋ชจ ํ๋ก์ธ์ค๋ ์๋ก์ด ์์ ํ๋ก์ธ์ค๋ฅผ ์์ฑํฉ๋๋ค. ๋ถ๋ชจ ํ๋ก์ธ์ค๋ ์์ ํ๋ก์ธ์ค๋ฅผ ์์ฑํ๊ณ , ์์์ ํ ๋นํ๋ฉฐ, ์์ ํ๋ก์ธ์ค์ ๋์์ ๊ฐ์ํ ์ฑ
์์ด ์์ต๋๋ค.
2. ์์ ํ๋ก์ธ์ค(Child Process): ๋ถ๋ชจ ํ๋ก์ธ์ค์ ์ํด ์์ฑ๋ ํ๋ก์ธ์ค๋ฅผ ์์ ํ๋ก์ธ์ค๋ผ๊ณ ํฉ๋๋ค. ์์ ํ๋ก์ธ์ค๋ ๋ถ๋ชจ ํ๋ก์ธ์ค๋ก๋ถํฐ ์์๊ณผ ๊ถํ์ ์์๋ฐ์ต๋๋ค. ๋ถ๋ชจ ํ๋ก์ธ์ค์ ์์ ํ๋ก์ธ์ค ๊ฐ์๋ ํน๋ณํ ํต์ ๋ฉ์ปค๋์ฆ์ด๋ ๋ฐ์ดํฐ ๊ณต์ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ฌ ์ํธ์์ฉํ ์ ์์ต๋๋ค.
๋ถ๋ชจ ํ๋ก์ธ์ค์ ์์ ํ๋ก์ธ์ค๋ ๋ค๋ฅธ ํ๋ก์ธ์ค์ด๊ธฐ ๋๋ฌธ์ ๊ฐ๊ธฐ ๋ค๋ฅธ PID๋ฅผ ๊ฐ์ง๋๋ค. ์ผ๋ถ ์ด์์ฒด์ ์์๋ ์์ ํ๋ก์ธ์ค์ PCB์ ๋ถ๋ชจ ํ๋ก์ธ์ค์ PID์ธ PPID(Parent Process ID)๊ฐ ๊ธฐ๋ก๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ถ๋ชจ ํ๋ก์ธ์ค๋ก๋ถํฐ ์์ฑ๋ ์์ ํ๋ก์ธ์ค๋ ์คํ ๊ณผ์ ์์ ๋ ๋ค๋ฅธ ์์ ํ๋ก์ธ์ค๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ๋ง์ ์ด์์ฒด์ ์์๋ ์ด์ฒ๋ผ ํ๋ก์ธ์ค๊ฐ ํ๋ก์ธ์ค๋ฅผ ๋ณ๋ ๊ณ์ธต์ ์ธ ๊ตฌ์กฐ๋ก์จ ํ๋ก์ธ์ค๋ค์ ๊ด๋ฆฌํฉ๋๋ค.

์ด๋ฌํ ํ๋ก์ธ์ค๋ค์ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ํ๋ก์ธ์ค ๊ณ์ธต ๊ตฌ์กฐ๋ผ๊ณ ํฉ๋๋ค. ์ ๋์ค ์ด์์ฒด์ ์์๋ ๊ฐ์ฅ ์ต์ด์ ํ๋ก์ธ์ค์ธ init ํ๋ก์ธ์ค๋ถํฐ ์์ํฉ๋๋ค. ๋ฆฌ๋
์ค๋ systemd, macOS์์๋ launchd์
๋๋ค.

ํ๋ก์ธ์ค ์์ฑ ๊ธฐ๋ฒ
๋ถ๋ชจ ํ๋ก์ธ์ค๋ฅผ ํตํด ์์ฑ๋ ์์ ํ๋ก์ธ์ค๋ค์ ๋ณต์ ์ ์ท ๊ฐ์์ ๊ธฐ๋ฅผ ํตํด ์คํ๋ฉ๋๋ค. ๋ถ๋ชจ ํ๋ก์ธ์ค๋ fork()๋ฅผ ํตํด์ ์์ ์ ๋ณต์ฌ๋ณธ์ ์์ ํ๋ก์ธ์ค๋ก ์์ฑํด๋ด๊ณ , ๋ง๋ค์ด์ง ์์ ํ๋ก์ธ์ค๋ exec()๋ฅผ ํตํด ์์ ์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๋ค๋ฅธ ํ๋ก๊ทธ๋จ์ผ๋ก ๊ต์ฒดํฉ๋๋ค.

fork()๋ ์๊ธฐ ์์ ํ๋ก์ธ์ค์ ๋ณต์ฌ๋ณธ์ ๋ง๋๋ ์์คํ ํธ์ถ์ ๋๋ค. ์์ ํ๋ก์ธ์ค๋ ๋ถ๋ชจ ํ๋ก์ธ์ค์ ๋ณต์ฌ๋ณธ์ด๊ธฐ ๋๋ฌธ์ ๋ถ๋ชจ ํ๋ก์ธ์ค์ ์์๋ค์ด ์์ ํ๋ก์ธ์ค์ ์์๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ง๋ค์ด์ง ๋ณต์ฌ๋ณธ์ exec() ํธ์ถ์ ํตํด ์๋ก์ด ํ๋ก๊ทธ๋จ์ผ๋ก ์ ํ๋ฉ๋๋ค. exec()๋ ์์ ์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์๋ก์ด ํ๋ก๊ทธ๋จ ๋ด์ฉ์ผ๋ก ์ ํํ์ฌ ๋ ๋ฆฝ์ ์ผ๋ก ์คํํ๋ ์์คํ ํธ์ถ์ ๋๋ค.

exec()๋ฅผ ํธ์ถํ๋ฉด ์ฝ๋ ์์ญ๊ณผ ๋ฐ์ดํฐ ์์ญ์ด ์คํํ ํ๋ก๊ทธ๋จ์ ๋ด์ฉ์ผ๋ก ๋ฐ๋๊ณ ๋๋จธ์ง ์คํ๊ณผ ํ ์์ญ์ ์ด๊ธฐํ๋ฉ๋๋ค.
#!/bin/bash
echo "Enter a command:"
read command
# ๋ถ๋ชจ ํ๋ก์ธ์ค์์ ์์ ํ๋ก์ธ์ค ์์ฑ
if fork() == 0; then
# ์์ ํ๋ก์ธ์ค์์ ์
๋ ฅ๋ ๋ช
๋ น์ด ์คํ
exec $command
else
# ๋ถ๋ชจ ํ๋ก์ธ์ค๋ ์์ ํ๋ก์ธ์ค๊ฐ ๋๋๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆผ
wait
echo "Command execution completed."
fi
์ ์คํฌ๋ฆฝํธ์์, ์ฌ์ฉ์๊ฐ ์
๋ ฅํ ๋ช
๋ น์ด๋ fork()๋ฅผ ํตํด ์์ ํ๋ก์ธ์ค๋ก ์ ๋ฌ๋๊ณ , ์์ ํ๋ก์ธ์ค๋ exec()๋ฅผ ์ฌ์ฉํ์ฌ ํด๋น ๋ช
๋ น์ด๋ฅผ ์คํํฉ๋๋ค. ๋ถ๋ชจ ํ๋ก์ธ์ค๋ ์์ ํ๋ก์ธ์ค๊ฐ ์คํ์ ๋ง์น ๋๊น์ง ๊ธฐ๋ค๋ฆฐ ํ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
์ด๋ฌํ ๋ฐฉ์์ผ๋ก fork()์ exec()๋ ํ๋ก์ธ์ค ๊ฐ์ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ํ์ฑํ๊ณ ์๋ก์ด ํ๋ก๊ทธ๋จ์ ์คํํ๋ ๋ฐ ์ฌ์ฉ๋ ์ ์์ต๋๋ค.
์ถ์ฒ: ํผ์ ๊ณต๋ถํ๋ ์ปดํจํฐ ๊ตฌ์กฐ์ ์ด์์ฒด์
'์ปดํจํฐ ๊ตฌ์กฐ & ์ด์์ฒด์ ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| ํ๋ก์ธ์ค ๋๊ธฐํ ๊ธฐ๋ฒ (0) | 2023.11.06 |
|---|---|
| CPU ์ค์ผ์ค๋ง ๊ฐ๋ ๊ณผ ์๊ณ ๋ฆฌ์ฆ (1) | 2023.11.05 |
| ๋ฐ๋ชฌ(Deamon) ํ๋ก์ธ์ค๋? (1) | 2023.10.28 |
| ์ด์ค๋ชจ๋(Dual Mode)์ ์์คํ ํธ์ถ(System Call) (0) | 2023.10.28 |
| [๋ณด์กฐ๊ธฐ์ต์ฅ์น] RAID์ ์ ์์ ์ข ๋ฅ (0) | 2023.10.25 |
๋๊ธ