๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์ปดํ“จํ„ฐ ๊ตฌ์กฐ & ์šด์˜์ฒด์ œ

ํ”„๋กœ์„ธ์Šค ๊ณ„์ธต ๊ตฌ์กฐ

by ์„œ์•„๋ž‘๐Ÿ˜ƒ 2023. 10. 31.

 

 

ํ”„๋กœ์„ธ์Šค ๊ณ„์ธต ๊ตฌ์กฐ

ํ”„๋กœ์„ธ์Šค ๊ณ„์ธต ๊ตฌ์กฐ๋Š” ์šด์˜์ฒด์ œ์—์„œ ํ”„๋กœ์„ธ์Šค๋“ค ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฐฉ๋ฒ•์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ์šด์˜์ฒด์ œ๋Š” ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๋“ค์„ ๊ด€๋ฆฌํ•˜๊ณ  ์ด๋“ค ๊ฐ„์˜ ์ƒํ˜ธ์ž‘์šฉ์„ ์กฐ์œจํ•˜๋Š”๋ฐ, ์ด๋Ÿฌํ•œ ํ”„๋กœ์„ธ์Šค๋“ค์€ ์ข…์ข… ๊ณ„์ธต์ ์ธ ๊ตฌ์กฐ๋ฅผ ํ˜•์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ตฌ์กฐ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋ถ€๋ชจ-์ž์‹ ๊ด€๊ณ„๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

1. ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค(Parent Process): ์šด์˜์ฒด์ œ์—์„œ ์ƒˆ๋กœ์šด ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒ์„ฑํ•  ๋•Œ, ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค๋Š” ์ƒˆ๋กœ์šด ์ž์‹ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค๋Š” ์ž์‹ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ์ž์›์„ ํ• ๋‹นํ•˜๋ฉฐ, ์ž์‹ ํ”„๋กœ์„ธ์Šค์˜ ๋™์ž‘์„ ๊ฐ์‹œํ•  ์ฑ…์ž„์ด ์žˆ์Šต๋‹ˆ๋‹ค.  

2. ์ž์‹ ํ”„๋กœ์„ธ์Šค(Child Process): ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค์— ์˜ํ•ด ์ƒ์„ฑ๋œ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ž์‹ ํ”„๋กœ์„ธ์Šค๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ž์‹ ํ”„๋กœ์„ธ์Šค๋Š” ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค๋กœ๋ถ€ํ„ฐ ์ž์›๊ณผ ๊ถŒํ•œ์„ ์ƒ์†๋ฐ›์Šต๋‹ˆ๋‹ค. ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค์™€ ์ž์‹ ํ”„๋กœ์„ธ์Šค ๊ฐ„์—๋Š” ํŠน๋ณ„ํ•œ ํ†ต์‹  ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด๋‚˜ ๋ฐ์ดํ„ฐ ๊ณต์œ  ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ์ƒํ˜ธ์ž‘์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.  

 

๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค์™€ ์ž์‹ ํ”„๋กœ์„ธ์Šค๋Š” ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ๊ธฐ ๋‹ค๋ฅธ PID๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค. ์ผ๋ถ€ ์šด์˜์ฒด์ œ์—์„œ๋Š” ์ž์‹ ํ”„๋กœ์„ธ์Šค์˜ PCB์— ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค์˜ PID์ธ PPID(Parent Process ID)๊ฐ€ ๊ธฐ๋ก๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค๋กœ๋ถ€ํ„ฐ ์ƒ์„ฑ๋œ ์ž์‹ ํ”„๋กœ์„ธ์Šค๋Š” ์‹คํ–‰ ๊ณผ์ •์—์„œ ๋˜ ๋‹ค๋ฅธ ์ž์‹ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งŽ์€ ์šด์˜์ฒด์ œ์—์„œ๋Š” ์ด์ฒ˜๋Ÿผ ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋‚ณ๋Š” ๊ณ„์ธต์ ์ธ ๊ตฌ์กฐ๋กœ์จ ํ”„๋กœ์„ธ์Šค๋“ค์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

 

 

์ถœ์ฒ˜: https://velog.io/@hongxeob/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4-%EC%83%81%ED%83%9C%EC%99%80-%EA%B3%84%EC%B8%B5-%EA%B5%AC%EC%A1%B0

 


์ด๋Ÿฌํ•œ ํ”„๋กœ์„ธ์Šค๋“ค์˜ ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ํ”„๋กœ์„ธ์Šค ๊ณ„์ธต ๊ตฌ์กฐ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์œ ๋‹‰์Šค ์šด์˜์ฒด์ œ์—์„œ๋Š” ๊ฐ€์žฅ ์ตœ์ดˆ์˜ ํ”„๋กœ์„ธ์Šค์ธ init ํ”„๋กœ์„ธ์Šค๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ๋ฆฌ๋ˆ…์Šค๋Š” systemd, macOS์—์„œ๋Š” launchd์ž…๋‹ˆ๋‹ค.

๋ฆฌ๋ˆ…์Šค ์ƒ์—์„œ pstree๋กœ ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

 

ํ”„๋กœ์„ธ์Šค ์ƒ์„ฑ ๊ธฐ๋ฒ•

๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค๋ฅผ ํ†ตํ•ด ์ƒ์„ฑ๋œ ์ž์‹ ํ”„๋กœ์„ธ์Šค๋“ค์€ ๋ณต์ œ์™€ ์˜ท ๊ฐˆ์•„์ž…๊ธฐ๋ฅผ ํ†ตํ•ด ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค๋Š” fork()๋ฅผ ํ†ตํ•ด์„œ ์ž์‹ ์˜ ๋ณต์‚ฌ๋ณธ์„ ์ž์‹ ํ”„๋กœ์„ธ์Šค๋กœ ์ƒ์„ฑํ•ด๋‚ด๊ณ , ๋งŒ๋“ค์–ด์ง„ ์ž์‹ ํ”„๋กœ์„ธ์Šค๋Š” exec()๋ฅผ ํ†ตํ•ด ์ž์‹ ์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ๊ต์ฒดํ•ฉ๋‹ˆ๋‹ค.

 

์ถœ์ฒ˜ : https://velog.io/@hongxeob/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4-%EC%83%81%ED%83%9C%EC%99%80-%EA%B3%84%EC%B8%B5-%EA%B5%AC%EC%A1%B0

 

fork()๋Š” ์ž๊ธฐ ์ž์‹  ํ”„๋กœ์„ธ์Šค์˜ ๋ณต์‚ฌ๋ณธ์„ ๋งŒ๋“œ๋Š” ์‹œ์Šคํ…œ ํ˜ธ์ถœ์ž…๋‹ˆ๋‹ค. ์ž์‹ ํ”„๋กœ์„ธ์Šค๋Š” ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค์˜ ๋ณต์‚ฌ๋ณธ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค์˜ ์ž์›๋“ค์ด ์ž์‹ ํ”„๋กœ์„ธ์Šค์— ์ƒ์†๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋งŒ๋“ค์–ด์ง„ ๋ณต์‚ฌ๋ณธ์€ exec() ํ˜ธ์ถœ์„ ํ†ตํ•ด ์ƒˆ๋กœ์šด ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ์ „ํ™˜๋ฉ๋‹ˆ๋‹ค. exec()๋Š” ์ž์‹ ์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ์ƒˆ๋กœ์šด ํ”„๋กœ๊ทธ๋žจ ๋‚ด์šฉ์œผ๋กœ ์ „ํ™˜ํ•˜์—ฌ ๋…๋ฆฝ์ ์œผ๋กœ ์‹คํ–‰ํ•˜๋Š” ์‹œ์Šคํ…œ ํ˜ธ์ถœ์ž…๋‹ˆ๋‹ค.

 

 

์ถœ์ฒ˜ : https://velog.io/@hongxeob/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4-%EC%83%81%ED%83%9C%EC%99%80-%EA%B3%84%EC%B8%B5-%EA%B5%AC%EC%A1%B0

 

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()๋Š” ํ”„๋กœ์„ธ์Šค ๊ฐ„์˜ ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ํ˜•์„ฑํ•˜๊ณ  ์ƒˆ๋กœ์šด ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

์ถœ์ฒ˜: ํ˜ผ์ž ๊ณต๋ถ€ํ•˜๋Š” ์ปดํ“จํ„ฐ ๊ตฌ์กฐ์™€ ์šด์˜์ฒด์ œ

 

๋Œ“๊ธ€