์šด์˜ ์ฒด์ œ: ์„ธ ๊ฐ€์ง€ ์‰ฌ์šด ๋ถ€๋ถ„. 3๋ถ€: ํ”„๋กœ์„ธ์Šค API(๋ฒˆ์—ญ)

์šด์˜ ์ฒด์ œ ์†Œ๊ฐœ

ํ—ค์ด ํ•˜๋ธŒ๋ฅด! ์ œ ์ƒ๊ฐ์—๋Š” ํฅ๋ฏธ๋กœ์šด ๋ฌธํ—Œ ์ธ OSTEP์— ๋Œ€ํ•œ ์ผ๋ จ์˜ ๊ธฐ์‚ฌ ๋ฒˆ์—ญ์„ ์—ฌ๋Ÿฌ๋ถ„์˜ ๊ด€์‹ฌ์„ ๋Œ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์ด ์ž๋ฃŒ๋Š” ์œ ๋‹‰์Šค ๊ณ„์—ด ์šด์˜ ์ฒด์ œ์˜ ์ž‘์—…, ์ฆ‰ ํ”„๋กœ์„ธ์Šค, ๋‹ค์–‘ํ•œ ์Šค์ผ€์ค„๋Ÿฌ, ๋ฉ”๋ชจ๋ฆฌ ๋ฐ ์ตœ์‹  OS๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ธฐํƒ€ ์œ ์‚ฌํ•œ ๊ตฌ์„ฑ ์š”์†Œ ์ž‘์—…์— ๋Œ€ํ•ด ๋งค์šฐ ๊นŠ์ด ๋…ผ์˜ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ ๋ชจ๋“  ์ž๋ฃŒ์˜ ์›๋ณธ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—. ๋น„์ „๋ฌธ์ ์œผ๋กœ(์ƒ๋‹นํžˆ ์ž์œ ๋กญ๊ฒŒ) ๋ฒˆ์—ญํ–ˆ์ง€๋งŒ ์ผ๋ฐ˜์ ์ธ ์˜๋ฏธ๋ฅผ ์œ ์ง€ํ–ˆ์œผ๋ฉด ํ•ฉ๋‹ˆ๋‹ค.

์ด ์ฃผ์ œ์— ๋Œ€ํ•œ ์—ฐ๊ตฌ์‹ค ์ž‘์—…์€ ์—ฌ๊ธฐ์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐํƒ€ ๋ถ€ํ’ˆ :

์—์„œ ๋‚ด ์ฑ„๋„์„ ํ™•์ธํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์•ผ๊ธฐ =)

๊ฒฝ๋ณด! ์ด๋ฒˆ ๊ฐ•์˜๋ฅผ ์œ„ํ•œ ์‹ค์Šต์‹ค์ด ์žˆ์Šต๋‹ˆ๋‹ค! ๋ฐ”๋ผ๋ณด๋‹ค ๊นƒํ—ˆ๋ธŒ

ํ”„๋กœ์„ธ์Šค API

UNIX ์‹œ์Šคํ…œ์—์„œ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์˜ˆ๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‘ ๊ฐœ์˜ ์‹œ์Šคํ…œ ํ˜ธ์ถœ์„ ํ†ตํ•ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ํฌํฌ() ะธ exec ().

ํฌํฌ() ํ˜ธ์ถœ

์šด์˜ ์ฒด์ œ: ์„ธ ๊ฐ€์ง€ ์‰ฌ์šด ๋ถ€๋ถ„. 3๋ถ€: ํ”„๋กœ์„ธ์Šค API(๋ฒˆ์—ญ)

fork() ํ˜ธ์ถœ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ƒ๊ฐํ•ด ๋ณด์‹ญ์‹œ์˜ค. ์‹คํ–‰ ๊ฒฐ๊ณผ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์šด์˜ ์ฒด์ œ: ์„ธ ๊ฐ€์ง€ ์‰ฌ์šด ๋ถ€๋ถ„. 3๋ถ€: ํ”„๋กœ์„ธ์Šค API(๋ฒˆ์—ญ)

๋จผ์ € main() ํ•จ์ˆ˜๋ฅผ ์ž…๋ ฅํ•˜๊ณ  ๋ฌธ์ž์—ด์„ ํ™”๋ฉด์— ์ธ์‡„ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ค„์—๋Š” ์›๋ณธ์—์„œ ํ˜ธ์ถœ๋œ ํ”„๋กœ์„ธ์Šค ์‹๋ณ„์ž๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. PID ๋˜๋Š” ํ”„๋กœ์„ธ์Šค ์‹๋ณ„์ž. ์ด ์‹๋ณ„์ž๋Š” UNIX์—์„œ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ๋ช…๋ น์€ fork()๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ์ด ์‹œ์ ์—์„œ ํ”„๋กœ์„ธ์Šค์˜ ๊ฑฐ์˜ ์ •ํ™•ํ•œ ๋ณต์‚ฌ๋ณธ์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. OS์˜ ๊ฒฝ์šฐ ์‹œ์Šคํ…œ์—์„œ ์‹คํ–‰ ์ค‘์ธ ๋™์ผํ•œ ํ”„๋กœ๊ทธ๋žจ์˜ ๋ณต์‚ฌ๋ณธ์ด 2๊ฐœ ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๋ฉฐ ๊ฒฐ๊ณผ์ ์œผ๋กœ fork() ํ•จ์ˆ˜๊ฐ€ ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค. ์ƒˆ๋กœ ์ƒ์„ฑ๋œ ํ•˜์œ„ ํ”„๋กœ์„ธ์Šค(์ด๋ฅผ ์ƒ์„ฑํ•œ ์ƒ์œ„ ํ”„๋กœ์„ธ์Šค์™€ ๊ด€๋ จํ•˜์—ฌ)๋Š” main() ํ•จ์ˆ˜์—์„œ ์‹œ์ž‘ํ•˜์—ฌ ๋” ์ด์ƒ ์‹คํ–‰๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•˜์œ„ ํ”„๋กœ์„ธ์Šค๋Š” ์ƒ์œ„ ํ”„๋กœ์„ธ์Šค์˜ ์ •ํ™•ํ•œ ๋ณต์‚ฌ๋ณธ์ด ์•„๋‹ˆ๋ผ๋Š” ์ ์„ ๊ธฐ์–ตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ ์ž์ฒด ์ฃผ์†Œ ๊ณต๊ฐ„, ์ž์ฒด ๋ ˆ์ง€์Šคํ„ฐ, ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๋ช…๋ น์— ๋Œ€ํ•œ ์ž์ฒด ํฌ์ธํ„ฐ ๋“ฑ์„ ๊ฐ–์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ, fork() ํ•จ์ˆ˜ ํ˜ธ์ถœ์ž์—๊ฒŒ ๋ฐ˜ํ™˜๋˜๋Š” ๊ฐ’์€ ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค. ํŠนํžˆ ์ƒ์œ„ ํ”„๋กœ์„ธ์Šค๋Š” ํ•˜์œ„ ํ”„๋กœ์„ธ์Šค์˜ PID ๊ฐ’์„ ๋ฐ˜ํ™˜์œผ๋กœ ๋ฐ›๊ณ  ํ•˜์œ„ ํ”„๋กœ์„ธ์Šค๋Š” 0๊ณผ ๊ฐ™์€ ๊ฐ’์„ ๋ฐ›๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฐ˜ํ™˜ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ถ„๋ฆฌํ•˜๊ณ  ๊ฐ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž์ฒด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. . ๊ทธ๋Ÿฌ๋‚˜ ์ด ํ”„๋กœ๊ทธ๋žจ์˜ ์‹คํ–‰์€ ์—„๊ฒฉํ•˜๊ฒŒ ์ •์˜๋˜์–ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. 2๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๋กœ ๋ถ„ํ• ๋œ ํ›„ OS๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ณ  ์ž‘์—…์„ ๊ณ„ํšํ•˜๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ๋‹จ์ผ ์ฝ”์–ด ํ”„๋กœ์„ธ์„œ์—์„œ ์‹คํ–‰๋˜๋Š” ๊ฒฝ์šฐ ํ”„๋กœ์„ธ์Šค ์ค‘ ํ•˜๋‚˜(์ด ๊ฒฝ์šฐ ์ƒ์œ„ ํ”„๋กœ์„ธ์Šค)๊ฐ€ ๊ณ„์† ์ž‘๋™ํ•˜๊ณ  ํ•˜์œ„ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ œ์–ด๊ถŒ์„ ๋ฐ›์Šต๋‹ˆ๋‹ค. ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋ฉด ์ƒํ™ฉ์ด ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ†ตํ™” ๋Œ€๊ธฐ()

์šด์˜ ์ฒด์ œ: ์„ธ ๊ฐ€์ง€ ์‰ฌ์šด ๋ถ€๋ถ„. 3๋ถ€: ํ”„๋กœ์„ธ์Šค API(๋ฒˆ์—ญ)

๋‹ค์Œ ํ”„๋กœ๊ทธ๋žจ์„ ๊ณ ๋ คํ•ด๋ณด์„ธ์š”. ์ด ํ”„๋กœ๊ทธ๋žจ์—์„œ๋Š” ํ†ตํ™”๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ๋‹ค๋ฆผ() ์ƒ์œ„ ํ”„๋กœ์„ธ์Šค๋Š” ํ•ญ์ƒ ํ•˜์œ„ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ํ™”๋ฉด์—๋Š” ์—„๊ฒฉํ•˜๊ฒŒ ์ •์˜๋œ ํ…์ŠคํŠธ ์ถœ๋ ฅ์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

์šด์˜ ์ฒด์ œ: ์„ธ ๊ฐ€์ง€ ์‰ฌ์šด ๋ถ€๋ถ„. 3๋ถ€: ํ”„๋กœ์„ธ์Šค API(๋ฒˆ์—ญ)

exec() ํ˜ธ์ถœ

์šด์˜ ์ฒด์ œ: ์„ธ ๊ฐ€์ง€ ์‰ฌ์šด ๋ถ€๋ถ„. 3๋ถ€: ํ”„๋กœ์„ธ์Šค API(๋ฒˆ์—ญ)

๋„์ „์„ ๊ณ ๋ คํ•ด๋ณด์„ธ์š” exec (). ์ด ์‹œ์Šคํ…œ ํ˜ธ์ถœ์€ ์™„์ „ํžˆ ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๋ ค๊ณ  ํ•  ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์šฐ๋ฆฌ๋Š” ์ „ํ™”ํ•  ๊ฒƒ์ด๋‹ค execvp() ๋‹จ์–ด ์„ธ๊ธฐ ํ”„๋กœ๊ทธ๋žจ์ธ wc ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. exec()๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด ์–ด๋–ป๊ฒŒ ๋˜๋‚˜์š”? ์ด ํ˜ธ์ถœ์—๋Š” ์‹คํ–‰ ํŒŒ์ผ ์ด๋ฆ„๊ณผ ์ผ๋ถ€ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์ธ์ˆ˜๋กœ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์ด ์‹คํ–‰ ํŒŒ์ผ์˜ ์ฝ”๋“œ์™€ ์ •์  ๋ฐ์ดํ„ฐ๊ฐ€ ๋กœ๋“œ๋˜๊ณ  ์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋œ ์ž์ฒด ์„ธ๊ทธ๋จผํŠธ๋ฅผ ๋ฎ์–ด์”๋‹ˆ๋‹ค. ์Šคํƒ, ํž™ ๋“ฑ ๋‚˜๋จธ์ง€ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์€ ๋‹ค์‹œ ์ดˆ๊ธฐํ™”๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ OS๋Š” ๋‹จ์ˆœํžˆ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๊ณ  ์ผ๋ จ์˜ ์ธ์ˆ˜๋ฅผ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋Š” ์ƒˆ๋กœ์šด ํ”„๋กœ์„ธ์Šค๋ฅผ ๋งŒ๋“ค์ง€ ์•Š๊ณ  ๋‹จ์ˆœํžˆ ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ๊ทธ๋žจ์„ ๋‹ค๋ฅธ ์‹คํ–‰ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ๋ณ€ํ™˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ž์†์—์„œ exec() ํ˜ธ์ถœ์„ ์‹คํ–‰ํ•œ ํ›„ ์›๋ž˜ ํ”„๋กœ๊ทธ๋žจ์ด ์ „ํ˜€ ์‹คํ–‰๋˜์ง€ ์•Š์€ ๊ฒƒ์ฒ˜๋Ÿผ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

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

๊ป์งˆ - ๋‹จ์ง€ ์‚ฌ์šฉ์ž ํ”„๋กœ๊ทธ๋žจ์ผ ๋ฟ์ž…๋‹ˆ๋‹ค. ๊ทธ๋…€๋Š” ๋‹น์‹ ์—๊ฒŒ ์ดˆ๋Œ€์žฅ์„ ๋ณด์—ฌ์ฃผ๊ณ  ๋‹น์‹ ์ด ๊ฑฐ๊ธฐ์— ๋ฌด์–ธ๊ฐ€๋ฅผ ์“ฐ๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ๊ฑฐ๊ธฐ์— ํ”„๋กœ๊ทธ๋žจ ์ด๋ฆ„์„ ์“ฐ๋ฉด ์‰˜์€ ํ•ด๋‹น ์œ„์น˜๋ฅผ ์ฐพ๊ณ , fork() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ ๋‹ค์Œ, ์ผ๋ถ€ ์œ ํ˜•์˜ exec()๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์ƒˆ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ํ”„๋กœ์„ธ์Šค๊ฐ€ ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค. ๋Œ€๊ธฐ() ํ˜ธ์ถœ. ํ•˜์œ„ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด ์‰˜์€ wait() ํ˜ธ์ถœ์—์„œ ๋Œ์•„์™€ ํ”„๋กฌํ”„ํŠธ๋ฅผ ๋‹ค์‹œ ์ธ์‡„ํ•˜๊ณ  ๋‹ค์Œ ๋ช…๋ น์ด ์ž…๋ ฅ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค.

fork() & exec() ๋ถ„ํ• ์„ ํ†ตํ•ด ์‰˜์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
wc ํŒŒ์ผ > new_file.

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

์œ ๋‹‰์Šค ํŒŒ์ดํ”„ ํŒŒ์ดํ”„() ํ˜ธ์ถœ์„ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ์ฐจ์ด์ ์„ ์ œ์™ธํ•˜๊ณ  ๋น„์Šทํ•œ ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„๋ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ํ”„๋กœ์„ธ์Šค์˜ ์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ์€ ์ปค๋„์— ์žˆ๋Š” ํŒŒ์ดํ”„ ํ์— ์—ฐ๊ฒฐ๋˜๋ฉฐ, ์—ฌ๊ธฐ์— ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์˜ ์ž…๋ ฅ ์ŠคํŠธ๋ฆผ์ด ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€