[OS] ํ๋ก์ธ์ค ์์ฑ ๋ฐ ์ด์ / ์ข๋น ํ๋ก์ธ์ค(Zombie Process) ์ ๊ณ ์ ํ๋ก์ธ์ค(Orphan Process)
๐ ํ๋ก์ธ์ค ์์ฑ
๋๋ถ๋ถ ์์คํ ๋ด์ ํ๋ก์ธ์ค๋ค์ ๋ณํ ์คํ๋ ์ ์์ผ๋ฉฐ, ๋ฐ๋์ ๋์ ์ผ๋ก ์์ฑ๋๊ณ ์ ๊ฑฐ๋์ด์ผ ํ๋ค. ๊ทธ๋ฌ๋ฏ๋ก ์ด์์ฒด์ ๋ ํ๋ก์ธ์ค ์์ฑ ๋ฐ ์ข ๋ฃ๋ฅผ ์ํ ๊ธฐ๋ฒ์ ์ ๊ณตํด์ผ ํ๋ค. ์คํ๋๋ ๋์ ํ๋ก์ธ์ค๋ ์ฌ๋ฌ ๊ฐ์ ์๋ก์ด ํ๋ก์ธ์๋ค์ ์์ฑํ ์ ์๋๋ฐ, ์์ฑํ๋ ํ๋ก์ธ์ค๋ฅผ ๋ถ๋ชจ ํ๋ก์ธ์ค๋ผ๊ณ ํ๊ณ ์๋ก์ด ํ๋ก์ธ์ค๋ ์์ ํ๋ก์ธ์ค๋ผ๊ณ ๋ถ๋ฅธ๋ค. ์ด ์๋ก์ด ํ๋ก์ธ์ค๋ค์ ๊ฐ๊ฐ ๋ค์ ํ๋ก์ธ์ค๋ค์ ์์ฑํ ์์๋ค.
์ด ๋, CPU๊ฐ ํ๋์ธ ๊ฒฝ์ฐ์ ๋ค์ํ ์์ ๋ค์ด ๋ณ๋ ฌ์ ์ผ๋ก ์งํ๋๋ ๊ฒ์ฒ๋ผ ๋ณด์ด์ง๋ง, ์ค์ ๋ก๋ ๋ณ๋ ฌ์ ์ผ๋ก ์ฒ๋ฆฌ๋๋ ๊ฒ์ด ์๋๊ณ CPU๋ ์ฌ์ ํ ํ ๋ฒ์ ํ๋์ ์์ ๋ง์ ์ฒ๋ฆฌํ์ง๋ง ๋์์ ์์ ์ ์ฒ๋ฆฌํ๋ค. (๋ณ๋ ฌ๊ณผ ๋์๋ ๋ค๋ฆ)
์ด์์ฒด์ ๋ค์ ํ๋ก์ธ์ค์๋ณ์(pid)๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ก์ธ์ค๋ค์ ๊ตฌ๋ถํ๋ค. ์ ๊ทธ๋ฆผ์ ์ ํ์ ์ธ ํ๋ก์ธ์ค ํธ๋ฆฌ๋ฅผ ๋ณด์ฌ์ฃผ๊ณ ์์ผ๋ฉฐ ํ๋ก์ธ์ค ์ด๋ฆ๊ณผ pid๋ฅผ ๋ณด์ธ๋ค. ์ธ์ ๋ pid๊ฐ 1์ธ systemd ํ๋ก์ธ์ค๊ฐ ๋ชจ๋ ์ฌ์ฉ์ ํ๋ก์ธ์ค์ ๋ฃจํธ ๋ถ๋ชจ ํ๋ก์ธ์ค ์ญํ ์ ์ํํ๋ค.
pid 1์ ์์คํ ์ด ๋ถํธ๋ ๋ ์์ฑ๋๋ ์ฒซ ๋ฒ์งธ ์ฌ์ฉ์ ํ๋ก์ธ์ค๋ก ์์คํ ์ด ๋ถํ ํ๋ฉด systemed ํ๋ก์ธ์ค๋ ๋ค์ํ ์ฌ์ฉ์ ํ๋ก์ธ์ค๋ฅผ ์์ฑํ๋ค. ์ด๋ฌํ ํ๋ก์ธ์ค์๋ ์น ๋๋ ํ๋ฆฐํธ ์๋ฒ, ssh ์๋ฒ ๋ฑ์ด ํฌํจ๋๋ค.
“ps -ef” ๋ Unix ๋ฐ Unix ๊ณ์ด ์ด์ ์ฒด์ ์์ ์คํ ์ค์ธ ๋ชจ๋ ํ๋ก์ธ์ค๋ฅผ ๋ณด๊ธฐ ์ํ ๋ช ๋ น์ด๋ก ํ๋ก์ธ์ค์ ์์ธ ์ ๋ณด๋ฅผ ๋์ดํ๊ณ ์ถ๋ ฅํ๋ค.
๐ ํ๋ก์ธ์ค ์์ฑ ์ต์
fork()๋ฅผ ํตํ ํ๋ก์ธ์ค ์์ฑ์๋ ๋ค์ํ ์ต์ ์ด ์๋ค.
- ์์ ๊ณต์ ์ต์
(Resource Sharing Options):
- Parent and children share all resources: ๋ถ๋ชจ ํ๋ก์ธ์ค์ ์์ ํ๋ก์ธ์ค๊ฐ ๋ชจ๋ ์์์ ๊ณต์ ํ๋ค. ์ฆ, ๋ถ๋ชจ์ ์์ ํ๋ก์ธ์ค๋ ํ์ผ, ๋ฉ๋ชจ๋ฆฌ, ๋์คํฌ ๊ณต๊ฐ ๋ฑ ๋ชจ๋ ์์์ ๊ณต์ ํ๋ค.
- Child shares subset of parent’s resources: ์์ ํ๋ก์ธ์ค๊ฐ ๋ถ๋ชจ ํ๋ก์ธ์ค์ ์ผ๋ถ ์์์ ๊ณต์ ํ๋ค. ์๋ฅผ ๋ค์ด, ๋ถ๋ชจ ํ๋ก์ธ์ค๊ฐ ์ด์ด ๋ ํ์ผ ์ค ์ผ๋ถ๋ง ์์ ํ๋ก์ธ์ค๊ฐ ์ ๊ทผํ ์ ์๋ค.
- Parent and child share no resources: ๋ถ๋ชจ ํ๋ก์ธ์ค์ ์์ ํ๋ก์ธ์ค๊ฐ ์ด๋ ํ ์์๋ ๊ณต์ ํ์ง ์๋๋ค. ๊ฐ๊ฐ์ ํ๋ก์ธ์ค๋ ๋ ๋ฆฝ์ ์ผ๋ก ์คํ๋๋ค.
- ์คํ ์ต์
(Execution Options):
- Parent and child execute concurrently: ๋ถ๋ชจ ํ๋ก์ธ์ค์ ์์ ํ๋ก์ธ์ค๊ฐ ๋์์ ์คํ๋๋ค. ์ด ๊ฒฝ์ฐ ๋ถ๋ชจ ํ๋ก์ธ์ค์ ์์ ํ๋ก์ธ์ค๋ ๋ ๋ฆฝ์ ์ผ๋ก ์คํ๋๋ฉฐ, ์๋ก ์ํฅ์ ์ฃผ์ง ์๋๋ค.
- Parent waits until child terminates: ๋ถ๋ชจ ํ๋ก์ธ์ค๋ ์์ ํ๋ก์ธ์ค๊ฐ ์ข ๋ฃ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฐ๋ค. ์์ ํ๋ก์ธ์ค์ ์คํ์ด ๋๋ ๋๊น์ง ๋ถ๋ชจ ํ๋ก์ธ์ค๋ ๋ธ๋ก๋๋ค.
- ์ฃผ์ ๊ณต๊ฐ (Address Space):
- Child is a duplicate of the parent: ์์ ํ๋ก์ธ์ค๋ ๋ถ๋ชจ ํ๋ก์ธ์ค์ ์ฃผ์ ๊ณต๊ฐ์ ๊ทธ๋๋ก ๋ณต์ฌํ๋ค. ์ฆ, ๋ถ๋ชจ ํ๋ก์ธ์ค์ ๋ชจ๋ ๋ฉ๋ชจ๋ฆฌ ๋ด์ฉ์ด ์์ ํ๋ก์ธ์ค์ ๋ณต์ฌ๋๋ค.
- Child has a new program loaded into it: ์์ ํ๋ก์ธ์ค๋ ์๋ก์ด ํ๋ก๊ทธ๋จ์ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋ํฉ๋๋ค. ๋ถ๋ชจ ํ๋ก์ธ์ค์๋ ๋ณ๋์ ์ฃผ์ ๊ณต๊ฐ์ ๊ฐ์ง๋ฉฐ, ๋ค๋ฅธ ํ๋ก๊ทธ๋จ์ ์คํํ ์ ์๋ค.
* ์ฃผ์ ๊ณต๊ฐ์ ๋ํ ์ต์ ์ ์ถํ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ๋ถ๋ถ์์ ๋์ฑ ์์ธํ๊ฒ ๋ค๋ฃฐ ์์ ์ด๋ค.
๐ fork(), exec(), wait(), exit()
- fork()
fork() ํจ์๋ ํธ์ถํ ํ๋ก์ธ์ค๋ฅผ ๋ณต์ ํ์ฌ ์๋ก์ด ํ๋ก์ธ์ค๋ฅผ ๋ง๋ ๋ค. ์ฒ์์๋ ๋์ผํ ๋ฉ๋ชจ๋ฆฌ ์ํ๋ฅผ ๊ฐ์ง๊ณ ์์ง๋ง, ํ๋์ ํ๋ก์ธ์ค์์ ๋ฉ๋ชจ๋ฆฌ ์ฐ๊ธฐ, ํ์ผ ๋งคํ ๋ฐ ์ธ๋งคํ์ด ์ด๋ฃจ์ด์ง๋ค๋ฉด ๋ค๋ฅธ ํ๋ก์ธ์ค์ ์ํฅ์ ์ฃผ์ง ์๊ฒ ๋๋ค. ์์ ์ด ์ผ์ด๋ ํ๋ก์ธ์ค๋ ๋ ๋ฆฝ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๊ฐ์ง๊ฒ ๋๊ธฐ ๋๋ฌธ์ด๋ค.
fork() ํจ์๋ฅผ ํธ์ถ ํ๊ฒ ๋๋ฉด ๋ฆฌํด ๊ฐ์ผ๋ก ๋ถ๋ชจ๋ ์์ ํ๋ก์ธ์ค์ PID๋ฅผ ๋ฐํํ๊ฒ ๋๊ณ ์์ ํ๋ก์ธ์ค์ return ๊ฐ์ ‘0’ ์ ๋ฐํํ๋ค.
- fork() ์์
- exec()
fork() ์์คํ ์ฝ ๋ค์์ ๋ ํ์ฌ ํ๋ก์ธ์ค๋ฅผ ์ ์งํ๊ณ ํ๋ก์ธ์ค ์ค ํ ํ๋ก์ธ์ค๊ฐ exec() ์์คํ ์ฝ์ ์ฌ์ฉํ๋ฉด ์์ ์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์๋ก์ด ํ๋ก๊ทธ๋จ์ผ๋ก ๊ต์ฒดํ๋ค. exec() ์์คํ ์ฝ์ ์ด์ง ํ์ผ์ ๋ฉ๋ชจ๋ฆฌ๋ก ์ ์ฌํ๋๋ฐ ์ด ๋ exec() ์์คํ ์ฝ์ ํฌํจํ๋ ์๋์ ํ๋ก๊ทธ๋จ์ ๋ฉ๋ชจ๋ฆฌ ์ด๋ฏธ์ง๋ฅผ ํ๊ดดํ๋ค. ์ด์ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ๋ ํ๋ก์ธ์ค๋ ํต์ ์ ํ ์ ์์ผ๋ฉฐ, ๊ทธ๋ฆฌ๊ณ ์ด์ด ๊ทธ๋ค ๊ฐ์์ ๊ธธ์ ๊ฐ๋ค. ๊ทธ ํ ๋ถ๋ชจ๋ ๋ ๋ง์ ์์์ ์์ฑํ ์ ์์ผ๋ฉฐ, ๋๋ ์์์ด ์คํํ๋ ๋์ ํ ์ผ์ด ์์ผ๋ฉด, ์์์ด ์ข ๋ฃ ๋ ๋๊น์ง ์ค๋น ํ์์ ์์ ์ ์ ๊ฑฐํ๊ธฐ ์ํด wait() ์์คํ ์ฝ์ ํ๋ค.
- wait()
์ฃผ๋ก fork() ๋ฅผ ์ด์ฉํด์ ์์ ํ๋ก์ธ์ค๋ฅผ ์์ฑํ์๋ ์ฌ์ฉํ๋ค. ์์ ํ๋ก์ธ์ค๊ฐ ์ข ๋ฃ๋ ๋๊น์ง ๋ถ๋ชจ ํ๋ก์ธ์ค๋ sleep()๋ชจ๋๋ก ๊ธฐ๋ค๋ฆฌ๊ฒ ๋๋๋ฐ, ๋ถ๋ชจ ํ๋ก์ธ์ค๊ฐ ์์ ํ๋ก์ธ์ค๋ณด๋ค ๋จผ์ ์ข ๋ฃ๋์ด ์์์ด ๊ณ ์ ํ๋ก์ธ์ค๊ฐ ๋๋ ๊ฒ ๋ฐฉ์งํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ค.
wait() ๋ฅผ ์ฐ๋ฉด ์์ํ๋ก์ธ์ค๊ฐ ์ข ๋ฃํ ๋๊น์ง ํด๋น์์ญ์์ ๋ถ๋ชจ ํ๋ก์ธ์ค๊ฐ sleep() ๋ชจ๋๋ก ๊ธฐ๋ค๋ฆฌ๊ฒ ๋๋ค.
์ด ๋ , ๋ฆฌํด ๊ฐ์ ์๋ฌ๊ฐ ๋ ๊ฒฝ์ฐ -1 , ์ฑ๊ณตํ ๊ฒฝ์ฐ child proccss์ ID๋ฅผ return ํ๊ฒ ๋๋ค.
- exit()
ํ๋ก์ธ์ค๋ ๋ง์ง๋ง ๋ฌธ์ฅ์ ์คํํ ํ ์ด์ ์ฒด์ ์ exit() ์์คํ ํธ์ถ์ ์ฌ์ฉํ์ฌ ํ๋ก์ธ์ค๋ฅผ ์ญ์ ํ๋๋ก ์์ฒญํ๋ค.
๋ถ๋ชจ๋ wait()๋ฅผ ํตํด ์์์ ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ฐํํ๋ค. ํ๋ก์ธ์ค์ ์์์ ์ด์ ์ฒด์ ์ ์ํด ํ ๋น ํด์ ๋๋ค.
์์ ํ๋ก์ธ์ค๊ฐ ํ ๋น๋ ์์์ ์ด๊ณผํ๊ฑฐ๋ ์์์๊ฒ ํ ๋น๋ ์์ ์ด ๋ ์ด์ ํ์ํ์ง ์์ ๊ฒฝ์ฐ ๋ถ๋ชจ ํ๋ก์ธ์ค๋ ๋ค์ํ ์ด์ ๋ก
์์ ํ๋ก์ธ์ค์ ์คํ์ ์ข ๋ฃํ ์ ์๋ค. ์ผ๋ถ ์ด์ ์ฒด์ ๋ ๋ถ๋ชจ ํ๋ก์ธ์ค๊ฐ ์ข ๋ฃ๋๋ฉด ์์ ํ๋ก์ธ์ค๊ฐ ์กด์ฌํ๋ ๊ฒ์ ํ์ฉํ์ง ์๊ธฐ๋ ํ๋ค.
๐ ์ข๋น ํ๋ก์ธ์ค(Zombie Process) ์ ๊ณ ์ ํ๋ก์ธ์ค (Orphan Process)
์ข๋น ํ๋ก์ธ์ค(Zombie Process) ๋ ์ด๋ฆ ๊ทธ๋๋ก ํ๋ก์ธ์ค๊ฐ ์ข ๋ฃ๋์์์๋ ๋ถ๊ตฌํ๊ณ , ๋ฉ๋ชจ๋ฆฌ์์ ์ฃฝ์ง ์๊ณ ์ด์์๋ ํ๋ก์ธ์ค๋ฅผ ์๋ฏธํ๋ค. ์์ ํ๋ก์ธ์ค๊ฐ ์ข ๋ฃ๋๋ฉด ๋ถ๋ชจ์ wait ์ํ๊ฐ ๋๋๊ณ ์ปค๋์๊ฒ ์์์ ๋ฐ๋ฉํด์ผ ํ์ง๋ง ๋ถ๋ชจ๊ฐ wait()์ ํธ์ถํ์ง ์์๋ค๋ฉด, ์์์ ๋ก์ง์ ๋ชจ๋ ๋ง์ณค์ง๋ง ์์์ ์ ์์ ์ผ๋ก ๋ฐ๋ฉํ์ง ๋ชปํ๊ณ ๋ฉ๋ชจ๋ฆฌ์์ ๋จ์์๊ฒ ๋๋ค.
์ฆ ์์ ํ๋ก์ธ์ค๋ ์ข ๋ฃ๋์์ง๋ง, ๋ถ๋ชจ ํ๋ก์ธ์ค๊ฐ wait() System Call์ ํธ์ถํ์ง ์์ ์์์ ๋ฐ๋ฉํ์ง ๋ชปํ๊ณ ์ด์ ์๋ ์ํ๋ฅผ ๋ปํ๋ค.
์ข๋น ํ๋ก์ธ์ค๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์๋ ํฌ๊ฒ 3๊ฐ์ง ๋ฐฉ๋ฒ์ด ์กด์ฌํ๋ค.
1. ๋ถ๋ชจ ํ๋ก์ธ์ค๊ฐ ๋ฆ๊ฒ๋ผ๋ wait() ์ ํธ์ถํ์ฌ ์์์ ์์์ ๋ฐ๋ฉํ๋ค.
2. ๋ถ๋ชจ ํ๋ก์ธ์ค๋ฅผ ์ข ๋ฃ์ํจ๋ค. -> ์ด ๊ณผ์ ์์ ๋ชจ๋ ์์์ด ์ข ๋ฃ๋ ์ ์๋ค.
3. ์ข๋น ํ๋ก์ธ์ค๋ฅผ ๊ฐ์ ์ข ๋ฃ ํ๋ค.
๊ณ ์ ํ๋ก์ธ์ค(Orphan Process) ๋ ์์์ด ์ข ๋ฃ๋๊ธฐ๋ ์ ์ ๋ถ๋ชจ ํ๋ก์ธ์ค๊ฐ ๋จผ์ ์ข ๋ฃ๋ ํ๋ก์ธ์ค๋ฅผ ์๋ฏธํ๋ค.
๋ถ๋ชจ๊ฐ ์ฌ๋ผ์ง ์์ ํ๋ก์ธ์ค๋ wait() ์ ํธ์ถํด์ค ๋ถ๋ชจ๊ฐ ์ฌ๋ผ์ก๊ธฐ ๋๋ฌธ์ ์ข๋น ํ๋ก์ธ์ค์ ๋์ผํ ๋ฌธ์ ๊ฐ ์๊ธฐ๊ฒ ๋๋ค.
์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด
์ปค๋์ ๋ชจ๋ ํ๋ก์ธ์ค์ ๊ฐ์ฅ ์ต๊ณ ์กฐ์์ธ init ํ๋ก์ธ์ค ์๊ฒ ๊ณ ์ ํ๋ก์ธ์ค๋ฅผ ์ ์ ์ํฌ ์ ์๋ค.
๊ทธ๋ผ ๊ณ ์ ํ๋ก์ธ์ค์ ๋ถ๋ชจ๋ init์ ํ๋ก์ธ์ค๊ฐ ๋จ์ผ๋ก์จ ํด๊ฒฐํ ์ ์๋ค.
- ์ข๋น ํ๋ก์ธ์ค(Zombie Process) ์์