๐ ๊ณต๋ถํ๋ ์ง์ง์ํ์นด๋ ์ฒ์์ด์ง?
[ํ๋ก์ธ์ค์ ์ค๋ ๋ ๋ค์ค ์ฒ๋ฆฌ] ์์ฝ (ํ๋ก์ธ์ค, ์๊ทธ๋, ์ค๋ ๋, ๋์์ฑ) ๋ณธ๋ฌธ
[ํ๋ก์ธ์ค์ ์ค๋ ๋ ๋ค์ค ์ฒ๋ฆฌ] ์์ฝ (ํ๋ก์ธ์ค, ์๊ทธ๋, ์ค๋ ๋, ๋์์ฑ)
์ง์ง์ํ์นด 2024. 1. 18. 16:46<์์์ง ๋์ ์ฌ๋ฌผ์ธํฐ๋ท์ ์ํ ๋ฆฌ๋ ์ค ํ๋ก๊ทธ๋๋ฐ with ๋ผ์ฆ๋ฒ ๋ฆฌํ์ด ์์ ์ ์ฐธ๊ณ ํด์ ์์ฑํ์์ต๋๋ค :-)>
โญ ํ๋ก์ธ์ค
์ผ์ ์ฒ๋ฆฌ ๋จ์
ํ๋ก์ธ์ค์ ์ค๋น์์๋ถํฐ ์ข ๋ฃ๊น์ง์ ์ฌ๋ฌ ์ํ๋ค์ ๊ฐ์ง๊ณ ์๋ค
ํ์ฌ ์์คํ ์์ ์คํ๋๋ ํ๋ก์ธ์ค๋ค์ ์ํ๋ฅผ ํ์ธํ๊ธฐ ์ํด์๋ ps ๋ช ๋ น์ด ์ฌ์ฉํ๋ค
aux ์ต์ ์ ์ฌ์ฉํด์ ์์คํ ์ ๋ชจ๋ ํ๋ก์ธ์ค์ ๋ํ ์ ๋ณด๋ฅผ ํ์ธํ ์ ์๋ค
โญ ์๊ทธ๋
ํ๋ก์ธ์ค ์ฌ์ด์ ๋น๋๊ธฐ์ ์ธ ์ฌ๊ฑด์ ์ ๋ฌํ๊ธฐ ์ํด ์ฌ์ฉ
๋ฆฌ๋ ์ค ์๊ทธ๋์ ๋ํ ์์ ์๊ทธ๋์ ๋ฐ์, ์ ๋ฌ, ์ฒ๋ฆฌ๋ฅผ ์ง์ํ๋ค
์๊ทธ๋ ์ฒ๋ฆฌ์ ์๊ทธ๋ ๋ง์คํฌ๋ฅผ ์ด์ฉํด์ ๋ณด๋ค ๋ค์ํ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค
sigprocmask() ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์๊ทธ๋ ๋ง์คํฌ์ ํด๋น ์๊ทธ๋์ ์ ํ์ ์ผ๋ก ๋ธ๋ก์ํค๊ณ ํด์
ํ ๋ฒ ์๊ทธ๋ ๋ง์คํฌ๊ฐ ์ค์ ๋๋ฉด ๋ค์ ์ค์ ๋๊น์ง ํ์ฌ ์ค์ ๋ ๊ฐ์ ๊ทธ๋๋ ์ฌ์ฉํ๋ค
์๊ทธ๋ ๋ง์คํฌ๊ฐ ์คํ๋๋ ๋์์ ์ ๋ฌ๋ ์๊ทธ๋์ ๋ธ๋ก๋๊ณ , ์๊ทธ๋์ด ๋ธ๋ก๋์ด ์๋ ๋์ ํ ๋ฒ ์ด์์ ์๊ทธ๋์ด ๋ฐ์ํ๋๋ผ๋ ๋ธ๋ก์ด ํด์ ๋ ํ์๋ ํ ๋ฒ๋ง ์ ๋ฌ๋๋ค
โญ ๋ค์ค ์ฒ๋ฆฌ ๊ธฐ๋ฒ
๋์์ ์ฌ๋ฌ ์ฌ๋์ด ์ปดํจํฐ๋ฅผ ์ด์ฉํ ์ ์๋๋ก ํ๊ณ ๋์์ ์ฌ๋ฌ ๊ฐ์ ํ๋ก๊ทธ๋จ์ ์คํ์ํฌ ์ ์๋๋ก ํ๋ค
ex) ๋ฉํฐ ํ๋ก์ธ์ค, ๋ฉํฐ ์ค๋ ๋
ํ๋ก์ธ์ค๋ ์คํ ์ค์ธ ํ๋ก๊ทธ๋จ์ผ๋ก ํ๋ก๊ทธ๋จ์ ์ฒ๋ฆฌ ๋จ์
๋ฆฌ๋ ์ค์์๋ ์๋ถํ ์์คํ ์ ์ด์ฉํด์ CPU ์ ์ฒ๋ฆฌ ์๊ฐ์ ์งง๊ฒ ์ชผ๊ฐ์ ์ด๋ฅผ ๊ฐ๊ฐ ์ฒ๋ฆฌํ ์ ์๋ ๋ฐฉ๋ฒ ์ ๊ณต
ํ๋ก์ธ์ค๋ ๊ฐ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๋ฐ๋ก ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์ ํ๋ก์ธ์ค๋ฅผ ์์ฑํ๋๋ฐ ์์๋๋ ์๊ฐ์ด๋ ์์์ ๋ญ๋น๊ฐ ๋ฐ์ํ๋ฉฐ ๋ง์ ์์ ํ๋ก์ธ์ค๋ฅผ ์์ฑํ ์ ์๋ค
โญ ์ค๋ ๋
ํ๋ก์ธ์ค ๊ฐ์ ํจ๊ป ์ฌ์ฉํ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ณต์ ํจ์ผ๋ก์จ ์์ฑ์ด ๋น ๋ฅด๊ณ ๋ญ๋น๋๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ง์ ์ ์๋ค
์ค๋ ๋๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๊ณต์ ํ๊ธฐ ๋๋ฌธ์ ์ฌ๋ฌ ์ค๋ ๋๊ฐ ๋์์ ํ๋์ ์์์ ์ ๊ทผํ ๋ ๋๊ธฐํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค
์ด๋ฌํ ๋๊ธฐํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ธ๋งํฌ์ด๋ ๋ฎคํ ์ค๋ฅผ ์ง์ํ๋ค
ํ๋ก์ธ์ค๊ฐ ์์๋๋ฉด ํน์ ์์ ์์ ์ข ๋ฃ๋ฅผ ํด์ผ ํ๋๋ฐ, ์ข ๋ฃ์๋ ์ ์ ์ข ๋ฃ์ ๋น์ ์ ์ข ๋ฃ๊ฐ ์๋ค
์ ์์ ์ธ ์ข ๋ฃ๋ main() ํจ์๋ก๋ถํฐ์ ๋ฆฌํด, exit() ํจ์๋ฅผ ํธ์ถํ๋ ๊ฒ
ํ์ค C ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์์คํ ํธ์ถ์ ์ ์ฉํด์ ์ข ๋ฃ ์ํ ๊ฐ์ ๋ช ์์ ์ ์ง์ or ํจ์ ํธ์ถ๋ก ๋ฐํ
๋น์ ์์ ์ธ ์ข ๋ฃ๋ abort() ํจ์๋ฅผ ํธ์ถํ์ฌ SIGABRT ์๊ทธ๋์ ๋ฐ์ or 0์ผ๋ก ๋๋ ํ ์๋ชป๋ ๋ฉ๋ชจ๋ฆฌ ์ฐธ์กฐ ๋ฑ์ ์๊ทธ๋์ ์ํด ์ข ๋ฃ๋ ์ ์๋๋ฐ, ์ปค๋์ด ์ข ๋ฃ ์ํ์ ๋ํ ๊ฐ ์์ฑํ๋ค
๋ฉํฐ ํ๋ก์ธ์ค ์์คํ ์ ๋ง๋ค๊ธฐ ์ํด fork()์ exec() ํจ์๋ฅผ ์ฌ์ฉํ๋ค
fork() ํจ์๋ฅผ ํธ์ถํ ํ๋ก์ธ์ค๋ฅผ ๋ถ๋ชจ ํ๋ก์ธ์ค, ์์ฑ๋๋ ํ๋ก์ธ์ค๋ฅผ ์์ ํ๋ก์ธ์ค
๋ถ๋ชจ ํ๋ก์ธ์ค๋ ์์ฑ๋ ์์ ํ๋ก์ธ์ค์ PID ๊ฐ๊ณ , ์์ ํ๋ก์ธ์ค๋ 0์ ๊ฐ ๊ฐ๋๋ค
์์ ํ๋ก์ธ์ค๋ getppid() ํจ์๋ฅผ ์ด์ฉํ์ฌ ๋ถ๋ชจ ํ๋ก์ธ์ค๋ฅผ ํ์ธํ๋ค
IPC ๋ ๋ ๋ฆฝ๋ ํ๋ก์ธ์ค ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๊ฒ
FIFO ๋ FIFO ํ์ผ์ ์์ฑํ๋ฉฐ, ๋ฒํผ๋ง ์ฉ๋๊ฐ ์๋ ์ฑ๋ ์ค์ ์ ์ํด ์ฌ์ฉ
๊ณต์ ๋ฉ๋ชจ๋ฆฌ๋ ํ๋ก์ธ์ค ๊ฐ์ ๊ณต์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ค์ ํ์ฌ ์ปค๋ ๋ฒํผ ๊ฒฝ์ ๋ฅผ ์์จ ์ ์๋ค
BSD ์ ๋์ค์์ ์ ๊ณตํ์๋ ํ์ผ ๋์คํฌ๋ฆฝํฐ ๊ธฐ๋ฐ IPC ์ ์์คํ V์ IPC, POSIX IPC ๋ฑ์ด ์๋ค
๋ฆฌ๋ ์ค์์๋ ์ค๋ ๋๋ฅผ ์ํด์ POSIX ์ค๋ ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด์ฉํ๋ฉฐ
pthread_create(), pthread_join(), pthread_detach(), pthread_cancle(), pthread_exit() ๋ฑ์ด ์๋ค
์ค๋ ๋ ๊ฐ์ ๊ฒฝ์์ ํด๊ฒฐํ๊ธฐ ์ํด ๋ฎคํ ์ค ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค