๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์šด์˜์ฒด์ œ

๋ฐ๋ชฌ(Deamon) ํ”„๋กœ์„ธ์Šค๋ž€?

by ์„œ์•„๋ž‘๐Ÿ˜ 2023. 10. 28.

 

๋ฐ๋ชฌ(Deamon)์ด๋ž€?

์ปดํ“จํ„ฐ๊ฐ€ ๋ถ€ํŒ…๋˜๋Š” ์ˆœ๊ฐ„๋ถ€ํ„ฐ ์ˆ˜๋งŽ์€ ํ”„๋กœ์„ธ์Šค๋“ค์ด ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ps ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ํ˜„์žฌ ์‹คํ–‰๋˜๊ณ  ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์œˆ๋„์šฐ๋Š” ์ž‘์—…๊ด€๋ฆฌ์ž). ์‹ค์ œ๋กœ ์‹คํ–‰์ค‘์ธ ํ”„๋กœ์„ธ์Šค๋“ค์„ ํ™•์ธํ•ด๋ณด๋ฉด ์šฐ๋ฆฌ๊ฐ€ ์‹คํ–‰ํ•œ ํ”„๋กœ์„ธ์Šค ์™ธ์—๋„ ์•Œ ์ˆ˜ ์—†๋Š” ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹คํ–‰๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

 

์‚ฌ์šฉ์ž๊ฐ€ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๊ณต๊ฐ„์—์„œ ์‹คํ–‰๋˜๋Š” ํ”„๋กœ์„ธ์Šค๋Š” ํฌ๊ทธ๋ผ์šด๋“œ ํ”„๋กœ์„ธ์Šค(Foreground Process), ์‚ฌ์šฉ์ž๊ฐ€ ๋ณด์ง€ ๋ชปํ•˜๋Š” ๊ณต๊ฐ„์—์„œ ์‹คํ–‰๋˜๋Š” ํ”„๋กœ์„ธ์Šค๋Š” ๋ฐฑ๊ทธ๋ผ์šด๋“œ ํ”„๋กœ์„ธ์Šค(Background Process)๋กœ ๋‚˜๋‰ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ฐฑ๊ทธ๋ผ์šด๋“œ ํ”„๋กœ์„ธ์Šค ์ค‘์—์„œ๋„ ์‚ฌ์šฉ์ž์™€ ์ง์ ‘ ์ƒํ˜ธ์ž‘์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค๋„ ์žˆ์ง€๋งŒ ์‚ฌ์šฉ์ž์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜์ง€ ์•Š๊ณ  ๊ทธ์ € ์ •ํ•ด์ง„ ์ผ๋งŒ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฑ๊ทธ๋ผ์šด๋“œ ํ”„๋กœ์„ธ์Šค๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ๋ฐ๋ชฌ(deamon)์ด๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค(์œˆ๋„์šฐ์—์„œ๋Š” ์„œ๋น„์Šค(service)).

 

 

 

๋ฐ๋ชฌ(Daemon)์˜ ํŠน์ง•

๋ฐ๋ชฌ์˜ ์ฃผ์š” ํŠน์ง•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

1. ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์‹คํ–‰: ๋ฐ๋ชฌ์€ ์ฃผ๋กœ ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘์ ์œผ๋กœ ์ œ์–ดํ•˜์ง€ ์•Š๊ณ , ์‹œ์Šคํ…œ์ด ๋ถ€ํŒ…๋  ๋•Œ ์ž๋™์œผ๋กœ ์‹œ์ž‘๋˜์–ด ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

2. ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ ์—†์ด ๋™์ž‘: ์‚ฌ์šฉ์ž๊ฐ€ ๋ช…์‹œ์ ์œผ๋กœ ๋ฐ๋ชฌ์„ ์‹คํ–‰์‹œํ‚ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋Œ€์‹ , ์‹œ์Šคํ…œ ๋ถ€ํŒ… ์‹œ ๋˜๋Š” ํŠน์ • ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์ž๋™์œผ๋กœ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค.

3. ์‹œ์Šคํ…œ ์„œ๋น„์Šค ์ œ๊ณต: ๋ฐ๋ชฌ์€ ์‹œ์Šคํ…œ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๊ฑฐ๋‚˜ ํŠน์ • ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์›น ์„œ๋ฒ„ ๋ฐ๋ชฌ์€ ์›น ํŽ˜์ด์ง€๋ฅผ ์ œ๊ณตํ•˜๊ณ , ํ”„๋ฆฐํ„ฐ ๋ฐ๋ชฌ์€ ํ”„๋ฆฐํŒ… ์„œ๋น„์Šค๋ฅผ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค.

4. ํ”„๋กœ์„ธ์Šค ๊ด€๋ฆฌ: ๋ฐ๋ชฌ์€ ์‹œ์Šคํ…œ์ด ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค ์ค‘ ํ•˜๋‚˜๋กœ์„œ, ์šด์˜์ฒด์ œ์— ์˜ํ•ด ๊ด€๋ฆฌ๋˜๊ณ  ๊ฐ๋…๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋ฐ๋ชฌ์ด ์ข…๋ฃŒ๋˜์ง€ ์•Š๋„๋ก ํ•˜๊ณ , ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋‹ค์‹œ ์‹œ์ž‘๋˜๋„๋ก ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.

5. ๋กœ๊ทธ ๊ธฐ๋ก: ๋ฐ๋ชฌ์€ ์ข…์ข… ์‹œ์Šคํ…œ ์ด๋ฒคํŠธ๋‚˜ ๋ฐ๋ชฌ ์ž์ฒด์˜ ๋™์ž‘์— ๊ด€ํ•œ ๋กœ๊ทธ๋ฅผ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค. ์ด ๋กœ๊ทธ๋Š” ์‹œ์Šคํ…œ ๊ด€๋ฆฌ์ž๊ฐ€ ์‹œ์Šคํ…œ ๋™์ž‘์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ณ  ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ๋„์›€์„ ์ค๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์›น ์„œ๋ฒ„์—์„œ ์‚ฌ์šฉ๋˜๋Š” "httpd" ๋ฐ๋ชฌ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฐ๋ชฌ์€ ์›น ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ์›น ํŽ˜์ด์ง€๋ฅผ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ „์†กํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, ์ด ๋ฐ๋ชฌ์€ ์‚ฌ์šฉ์ž๊ฐ€ ๋ช…์‹œ์ ์œผ๋กœ ์‹คํ–‰์‹œํ‚ค์ง€ ์•Š๊ณ , ์‹œ์Šคํ…œ์ด ๋ถ€ํŒ…๋  ๋•Œ ์ž๋™์œผ๋กœ ์‹œ์ž‘๋˜๋ฉฐ, ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ๊ณ„์†ํ•ด์„œ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

 

 

 

๋ฐ๋ชฌ ํ”„๋กœ์„ธ์Šค ๋งŒ๋“ค์–ด๋ณด๊ธฐ

C++์„ ํ†ตํ•ด ๋ฐ๋ชฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋งŒ๋“ค์–ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

#include <iostream>
#include <fstream>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>

void write_log(const std::string& message) {
    std::ofstream log_file("/tmp/daemon_example.log", std::ios::app);
    if (log_file.is_open()) {
        log_file << message << std::endl;
        log_file.close();
    }
}

int main() {
    // ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ข…๋ฃŒํ•˜์—ฌ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์‹คํ–‰
    pid_t pid, sid;
    pid = fork();
    if (pid < 0) {
        exit(EXIT_FAILURE);
    }
    if (pid > 0) {
        exit(EXIT_SUCCESS);
    }

    // ์ƒˆ๋กœ์šด ์„ธ์…˜ ๋ฐ ํ”„๋กœ์„ธ์Šค ๊ทธ๋ฃน์„ ์‹œ์ž‘ํ•˜์—ฌ ๋ฐ๋ชฌ์ด ๋…๋ฆฝ์ ์œผ๋กœ ์‹คํ–‰๋˜๋„๋ก ํ•จ
    sid = setsid();
    if (sid < 0) {
        exit(EXIT_FAILURE);
    }

    // ๋ฐ๋ชฌ์ด ์‹คํ–‰๋  ๊ฒฝ๋กœ๋กœ ์ด๋™ (ํ•„์š”ํ•œ ๊ฒฝ์šฐ)
    chdir("/");

    // ํŒŒ์ผ ๊ถŒํ•œ ์„ค์ • (ํ•„์š”ํ•œ ๊ฒฝ์šฐ)
    umask(0);

    // ๋ฐ๋ชฌ ๋™์ž‘ ์‹œ์ž‘
    while (true) {
        // ๋ฐ๋ชฌ ๋กœ๊ทธ ๋ฉ”์‹œ์ง€ ๊ธฐ๋ก
        write_log("Daemon is running...");

        // ๋ฐ๋ชฌ์ด ์‹คํ–‰๋  ์ž‘์—… ์ˆ˜ํ–‰
        // ...

        // 5์ดˆ ๋Œ€๊ธฐ
        sleep(5);
    }

    return 0;
}

 

์ด ์ฝ”๋“œ๋Š” ๋ฐ๋ชฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  /tmp/daemon_example.log ํŒŒ์ผ์— ์ฃผ๊ธฐ์ ์œผ๋กœ "Daemon is running..." ๋ฉ”์‹œ์ง€๋ฅผ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค. ๋ฐ๋ชฌ์€ ๋ฌดํ•œ ๋ฃจํ”„๋ฅผ ์‹คํ–‰ํ•˜๋ฉฐ, ๊ฐ„๊ฒฉ์„ ๋‘๊ณ  ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ์ฝ”๋“œ๋Š” ๊ธฐ๋ณธ์ ์ธ ๋ฐ๋ชฌ์˜ ๋™์ž‘์„ ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•œ ๊ฐ„๋‹จํ•œ ์˜ˆ์ œ์ด๋ฉฐ, ๋” ๋ณต์žกํ•œ ๋ฐ๋ชฌ์€ ๋” ๋งŽ์€ ๊ธฐ๋Šฅ๊ณผ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ํฌํ•จํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, ๋ฐ๋ชฌ์ด ์‹คํ–‰๋  ๋•Œ์˜ ๊ถŒํ•œ, ๋กœ๊น… ๋ฐฉ๋ฒ•, ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ ๋“ฑ์„ ์‹ ์ค‘ํ•˜๊ฒŒ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

 

 

fork()์™€ exec()

์•ž์„œ ๋ฐ๋ชฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋งŒ๋“ค์–ด๋ดค์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์“ฐ์ด๋Š” ์‹œ์Šคํ…œ ํ˜ธ์ถœ์€ fork()์™€ exec()์ž…๋‹ˆ๋‹ค. ์ด ๋‘ ๊ฐœ์˜ ์‹œ์Šคํ…œ ํ˜ธ์ถœ์€ UNIX ์šด์˜์ฒด์ œ ์‹œ์Šคํ…œ์˜ ๊ทผ๊ฐ„์ด ๋˜๋Š” ํ˜ธ์ถœ๋กœ์„œ initํ”„๋กœ์„ธ์Šค๋ถ€ํ„ฐ ์‹œ์ž‘๋˜๋Š” ํ”„๋กœ์„ธ์Šค ์ฒด์ธ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ํ•œ ๋งˆ๋””๋กœ ์ด ์‹œ์Šคํ…œ ํ˜ธ์ถœ ์—†์ด๋Š” ์šด์˜์ฒด์ œ๊ฐ€ ๋งŒ๋“ค์–ด์งˆ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋‹ค์‹œ ํ•œ๋ฒˆ ๊ฐ•์กฐํ•˜์ง€๋งŒ fork์™€ exec๋Š” UNIX ๋ฐ UNIX ๊ณ„์—ด ์šด์˜์ฒด์ œ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์ค‘์š”ํ•œ ์‹œ์Šคํ…œ ํ˜ธ์ถœ์ž…๋‹ˆ๋‹ค. ์ด ๋‘ ์‹œ์Šคํ…œ ํ˜ธ์ถœ์ด ๋ฌด์—‡์ด๊ณ  ์ด๋ฅผ ํ†ตํ•ด ๋ฐ๋ชฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋งŒ๋“œ๋Š” ๊ณผ์ •์„ ์ดํ•ดํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.



1. fork() ์‹œ์Šคํ…œ ํ˜ธ์ถœ:
fork() ์‹œ์Šคํ…œ ํ˜ธ์ถœ์€ ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ณต์ œํ•˜์—ฌ ์ž์‹ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ, ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค์™€ ์ž์‹ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ชจ๋‘ ๋™์ผํ•œ ํ”„๋กœ๊ทธ๋žจ ์ฝ”๋“œ๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. fork() ํ˜ธ์ถœ์€ ๋‘ ๋ฒˆ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ํ•œ ๋ฒˆ์€ ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค์—๊ฒŒ๋Š” ์ž์‹ ํ”„๋กœ์„ธ์Šค์˜ PID(ํ”„๋กœ์„ธ์Šค ์‹๋ณ„์ž)๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ , ์ž์‹ ํ”„๋กœ์„ธ์Šค์—๊ฒŒ๋Š” 0์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์‹คํŒจ ์‹œ์—๋Š” -1์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

#include <unistd.h>

pid_t fork(void);

 


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

#include <unistd.h>

int execvp(const char *file, char *const argv[]);





๋ฐ๋ชฌ ํ”„๋กœ์„ธ์Šค ์ƒ์„ฑ ์›๋ฆฌ


1. fork() ํ˜ธ์ถœ: ๋ฐ๋ชฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค๋Š” fork()๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์ž์‹ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ, ๋ถ€๋ชจ์™€ ์ž์‹์€ ๋™์ผํ•œ ์ฝ”๋“œ๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

2. ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ: ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค๋Š” fork()๋ฅผ ํ†ตํ•ด ์ž์‹ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒ์„ฑํ•œ ํ›„ ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ๋˜๋ฉด ์ž์‹ ํ”„๋กœ์„ธ์Šค๋Š” ๊ณ ์•„ ํ”„๋กœ์„ธ์Šค(Orphan Process)๊ฐ€ ๋˜์–ด init ํ”„๋กœ์„ธ์Šค(์ผ๋ฐ˜์ ์œผ๋กœ PID 1์ธ ํ”„๋กœ์„ธ์Šค)๊ฐ€ ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

3. setsid() ํ˜ธ์ถœ: ์ž์‹ ํ”„๋กœ์„ธ์Šค๋Š” ์ƒˆ๋กœ์šด ์„ธ์…˜ ๋ฐ ํ”„๋กœ์„ธ์Šค ๊ทธ๋ฃน์„ ์‹œ์ž‘ํ•˜๊ธฐ ์œ„ํ•ด setsid() ์‹œ์Šคํ…œ ํ˜ธ์ถœ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋กœ์จ ๋ฐ๋ชฌ ํ”„๋กœ์„ธ์Šค๋Š” ๊ธฐ์กด์˜ ์„ธ์…˜ ๋ฐ ํ”„๋กœ์„ธ์Šค ๊ทธ๋ฃน๊ณผ ์™„์ „ํžˆ ๋…๋ฆฝ๋œ ์ƒˆ๋กœ์šด ์„ธ์…˜๊ณผ ํ”„๋กœ์„ธ์Šค ๊ทธ๋ฃน์„ ๊ฐ–๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

4. fork() ํ˜ธ์ถœ(๋‘ ๋ฒˆ์งธ): ๋ฐ๋ชฌ ํ”„๋กœ์„ธ์Šค๋Š” ํ•œ ๋ฒˆ ๋” fork()๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ๋‘ ๋ฒˆ์งธ ์ž์‹ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ฐ๋ชฌ ํ”„๋กœ์„ธ์Šค๋Š” ํ•˜๋‚˜์˜ ์„ธ์…˜ ๋ฆฌ๋”(์„ธ์…˜์˜ ์ฒซ ๋ฒˆ์งธ ํ”„๋กœ์„ธ์Šค)๊ฐ€ ๋˜๋ฉฐ, ๋” ์ด์ƒ ์ œ์–ด ํ„ฐ๋ฏธ๋„์— ๋ฌถ์ด์ง€ ์•Š๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

5. ํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค ์ดˆ๊ธฐํ™”: ๋ฐ๋ชฌ ํ”„๋กœ์„ธ์Šค๋Š” ํ•„์š”ํ•œ ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ๋ฅผ ๋‹ซ๊ณ , ์ž‘์—… ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ , umask๋ฅผ ์„ค์ •ํ•˜๋Š” ๋“ฑ์˜ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์—ฌ ๋ฐ๋ชฌ์ด ๋…๋ฆฝ์ ์œผ๋กœ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ™˜๊ฒฝ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

6. exec() ํ˜ธ์ถœ: ๋ฐ๋ชฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์›ํ•˜๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ƒˆ๋กœ์šด ํ”„๋กœ๊ทธ๋žจ์„ exec()๋ฅผ ํ†ตํ•ด ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ํ”„๋กœ๊ทธ๋žจ์€ ๋ฐ๋ชฌ์˜ ์‹ค์งˆ์ ์ธ ๋™์ž‘์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค.

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

 

 

๋Œ“๊ธ€