์ด ํฌ์ŠคํŒ…์€ ์ฟ ํŒก ํŒŒํŠธ๋„ˆ์Šค ํ™œ๋™์˜ ์ผํ™˜์œผ๋กœ, ์ด์— ๋”ฐ๋ฅธ ์ผ์ •์•ก์˜ ์ˆ˜์ˆ˜๋ฃŒ๋ฅผ ์ œ๊ณต๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ˜์‘ํ˜•

****์†Œ์Šค ์›ํ•˜์‹œ๋Š”๋ถ„์€ ๋Œ“๊ธ€์— ๋‚จ๊ฒจ์ฃผ์‹œ๊ธธ.


๋™์˜์ƒ ์„ค๋ช…

ํ”„๋กœ๊ทธ๋žจ์„ ์‹œ์ž‘ํ•˜๋ฉด, ๋‘ ๊ฐœ์˜ ํ๋ธŒ๊ฐ€ ๊ฒน์ณ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•œ ๊ฐœ์˜ ์ค‘์‹ฌํ๋ธŒ๋ฅผ ๊ธฐ์ค€์œผ๋กœ 3D T,R,S๋ณ€ํ™˜์„ ํ•ฉ๋‹ˆ๋‹ค.

ํ‚ค๋Š” ์œ„์˜ ์„ค๋ช…๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์นด๋ฉ”๋ผ๊ฐ€ (300, 600, 600)์—์„œ ์›์ ์„ ๋ฐ”๋ผ๋ณด๊ฒŒ ํ•˜์˜€์œผ๋ฉฐ,

์นด๋ฉ”๋ผ์˜ ์ด๋™ ๋ฐ ํšŒ์ „์€ ๋‹ค์Œ์ˆ™์ œ๋ฅผ ์œ„ํ•ด ๊ตฌํ˜„ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

3D๋ณ€ํ™˜์„ ์‰ฝ๊ฒŒ ์•Œ์•„๋ณด๊ธฐ ์œ„ํ•ด x,y,z์ถ•์˜ ์„ ์„ ๊ทธ์—ˆ์Šต๋‹ˆ๋‹ค.

์˜ํ˜„์žฌ์˜ ์ƒํƒœ๋ฅผ ์ •๋Ÿ‰์ ์œผ๋กœ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด ํ˜„์žฌ ๋ณ€ํ™˜์˜
์•ก์…˜ ๋ฐ ์ขŒํ‘œ๋ฅผ ํ‚ค๋ฅผ ๋ˆ„๋ฅผ๋•Œ ๋งˆ๋‹ค ์ฝ˜์†”์ฐฝ์— ๋”ฐ๋กœ ์ถœ๋ ฅํ•˜์˜€์Šต๋‹ˆ๋‹ค.(๊ทธ๋ฆผ1๊ณผ ๊ฐ™์Œ)




ํ‚ค ์„ค๋ช…


 

 

 


๋””์Šค์ปค์…˜

3D๋ณ€ํ™˜์„ ์œ„ํ•œ Composite Matrix๋Š” ์‹ค์Šต์ž๋ฃŒ๋ฅผ ์ฐธ๊ณ ํ•˜์˜€๊ณ , ๋‹ค์–‘ํ•œ ํผํฌ๋จผ์Šค๋ฅผ ๋‚ด๊ธฐ ์œ„ํ•ด ์ค‘์‹ฌํ๋ธŒ๋„ ์ด๋™ ๊ฐ€๋Šฅ ํ•˜๋„๋ก ํ•˜์˜€์Šต๋‹ˆ๋‹ค. DisplayFunc ํ•จ์ˆ˜์— ๊ทธ๋ฆฌ๋Š” ์ˆœ์„œ๋ฅผ ์œ ์ €๊ฐ€ ์ž์—ฐ ์ƒํƒœ์—์„œ ๋ณด๋“ฏ์ด ํ•˜๊ธฐ์œ„ํ•ด ์ค‘์‹ฌํ๋ธŒ์™€ ๋ฌด๋น™ํ๋ธŒ์˜ ์ค‘์‹ฌ์ขŒํ‘œ๋ฅผ ๋น„๊ต ํ•˜๋ ค๊ณ  ํ–ˆ์œผ๋‚˜, ๋ฌด๋น™ํ๋ธŒ์˜ ํฌ๊ธฐ๊นŒ์ง€ ๊ณ ๋ คํ•ด์•ผ ํ•˜๋ฉฐ ์ด๋ฒˆ๊ณผ์ œ์˜ ์ด์Šˆ๊ฐ€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ฐจํ›„ ๊ณ ๋ฏผ๊ฑฐ๋ฆฌ๋กœ ๋‚จ๊ฒจ๋‘์—ˆ์Šต๋‹ˆ๋‹ค. ์†Œ์ˆ˜์ ์— ์˜ํ•ด ์ขŒํ‘œ๋“ค์˜ ๊ฐ’์ด ๋ฏธ์†Œ๋Ÿ‰ ๋ณ€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— 3D๋ณ€ํ™˜ ์ˆ˜ํ–‰์„ ์•„์ฃผ ๋งŽ์ด ํ•˜๊ฒŒ ๋˜๋ฉด(ํ˜น์€ ํšŒ์ „ํ›„์— ํฌ๊ธฐ๋ณ€ํ™”์„ ํ•  ๊ฒฝ์šฐ), ๊ฐ•์ฒด๊ฐ€ ํ‹€์–ด์ง€๋Š” ํ˜„์ƒ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฒˆ ๊ณผ์ œ๋ฅผ ํ†ตํ•ด ๋‹ค์†Œ ์ง๊ด€์ ์ด์ง€ ์•Š์€ 3D ๋ณ€ํ™˜์˜ ๊ณ„์‚ฐ ๋ฐ ์›๋ฆฌ๋ฅผ ์ˆ™๋‹ฌํ•  ์ˆ˜ ์žˆ์—ˆ์œผ๋ฉฐ, ์‹œ๊ฐ„์ด ํ—ˆ๋ฝํ•˜๋ฉด OPENGL์ž์ฒด 3D๋ณ€ํ™˜ ํ•จ์ˆ˜๋“ค๊ณผ ํšจ์œจ์„ฑ์„ ๋น„๊ตํ•ด๋ณผ ๊ณ„ํš์ž…๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๋ฐ˜์‘ํ˜•

์ด ํฌ์ŠคํŒ…์€ ์ฟ ํŒก ํŒŒํŠธ๋„ˆ์Šค ํ™œ๋™์˜ ์ผํ™˜์œผ๋กœ, ์ด์— ๋”ฐ๋ฅธ ์ผ์ •์•ก์˜ ์ˆ˜์ˆ˜๋ฃŒ๋ฅผ ์ œ๊ณต๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ˜์‘ํ˜•
 
  ๊ธ€์“ด์ด : ํ‘ธ์šฐ     ๋‚ ์งœ : 08-03-01 19:09     ์กฐํšŒ : 486    


์š”์ฆ˜ ํ†ต ๊ธ€์„ ์•ˆ ์˜ฌ๋ ธ๋„ค์š”.
์š”์ฆ˜ ํšŒ์‚ฌ์ผ๋กœ ์ •์‹ ์ด ์—†๋„ค์š”.
์ฃ„์†กํ•˜๊ตฌ์š”. ^^; 
์•„๋ฌดํŠผ ์ด๋ฒˆ์—๋Š” UNIX/LINUX์˜ Deamon ํ”„๋กœ์„ธ์Šค ๋งŒ๋“œ๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ์ •๋ฆฌํ•ด ๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.
 
1. Daemon์ด๋ž€?
 
๋ญ ์ด๊ธ€์„ ๊ด€์‹ฌ์ด ์žˆ์–ด์„œ ์ฝ๊ณ  ๊ณ„์‹œ๋Š” ๋ถ„ ์ค‘์— Daemon์ด ๋ญ”์ง€๋ฅผ ๋ชจ๋ฅด์‹œ๋Š” ๋ถ„์€ ์—†๊ฒ ์ง€๋งŒ...
๊ทธ๋ž˜๋„ ํ•œ๋ฒˆ ์ •๋ฆฌํ•ด ๋ด…๋‹ˆ๋‹ค.
Daemon์˜ ๋œป ์ž์ฒด๋Š” "์•…๋งˆ", "์•…๋ น", "๊ท€์‹ "๊ณผ ๊ฐ™์ด ์ข€ ๋ฌด์‹œ๋ฌด์‹œ ํ•ฉ๋‹ˆ๋‹ค.
ํ•˜์ง€๋งŒ Daemon์˜ ์–ด์›์€ ์‹ ํ™”์—์„œ ์‹ ๊ณผ ์ธ๊ฐ„์‚ฌ์ด์˜ ์ดˆ์ž์—ฐ์ ์ธ ์˜์ ์กด์žฌ๋กœ์„œ์˜ ์ˆ˜ํ˜ธ์‹ ์—์„œ ๋‚˜์™”๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๋ญ ์ข‹์€์ชฝ์œผ๋กœ ์ƒ๊ฐํ•˜์ฃ .
์ปดํ“จํ„ฐ ์ƒ์—์„œ Daemon์€ ๊ฒ‰์œผ๋กœ๋Š” ๋ณด์ด์ง€ ์•Š์ง€๋งŒ ํ•ญ์ƒ ๋’ค์—์„œ ๋ญ”๊ฐ€๋ฅผ ๊ณ„์†ํ•ด์„œ ์ˆ˜ํ–‰ํ•ด ์ฃผ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋กœ httpd, ftpd, telnetd ๋“ฑ...
์ด๋Ÿฐ๋ฉด์—์„œ ์™œ Daemon์ด๋ผ๋Š” ์ด๋ฆ„ ์ง€์—ˆ๋Š”์ง€ ์ดํ•ด๊ฐ€ ๊ฐ€๋„ค์š”.
์œˆ๋„์šฐ์ฆˆ์—์„œ๋Š” Daemon์ด๋ผ๋Š” ์šฉ์–ด๊ฐ€ ๋งˆ์Œ์— ๋“ค์ง€ ์•Š์•˜๋Š”์ง€ ์•„๋‹ˆ๋ฉด ๋ญ”๊ฐ€ ๊ผญ ํŠ€๊ฒŒ ํ•ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋Š”์ง€ ๋ชฐ๋ผ๋„... UNIX/LINUX์˜ Daemon๊ณผ ๊ฐ™์€ ์—ญํ• ์„ ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ Service ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
"๋ฐ๋ชฌ"์€ ์ด๋ฆ„์— ๋ญ”๊ฐ€ ์ฒ ํ•™์„ ๋‹ด์•„ ์ง€์€๊ฒƒ ๊ฐ™์€๋ฐ... "์„œ๋น„์Šค"... ์ฐธ ๋‹จ์ˆœํ•ด์„œ ์ข‹๊ธด ์ข‹๋„ค์š”. ใ…‹ใ…‹  ^^;
 
Daemon ํ”„๋กœ๊ทธ๋žจ์ด ๋˜๋ ค๋ฉด ๋ช‡๊ฐ€์ง€ ํŠน์ง•์„ ๊ฐ–์ถ”์–ด์•ผ ํ•˜์ง€๋งŒ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ์€ "OS๊ฐ€ ๋ถ€ํŒ…๋˜๋ฉด ์‚ฌ์šฉ์ž์˜ ๊ฐœ์ž…์—†์ด ์‹คํ–‰๋  ์ˆ˜ ์žˆ์„ ๊ฒƒ"์ž…๋‹ˆ๋‹ค.
์ด ๋ง์€ ๋‹ค์‹œ ๋งํ•ด ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๋กœ๊ทธ์ธ์„ ํ•˜์—ฌ ๊ตณ์ด ์‹คํ–‰ํ•˜์ง€ ์•Š์•„๋„ OS์˜ initํ”„๋กœ์„ธ์Šค์— ์˜ํ•ด ์‹คํ–‰๋  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค๋Š” ์ด์•ผ๊ธฐ ์ด๊ณ  ์ด๋Ÿด๋ ค๋ฉด ํ”„๋กœ๊ทธ๋žจ์„ ์ œ์–ดํ•˜๋Š” ํ„ฐ๋ฏธ๋„(tty)๋ฅผ ๊ฐ–์ง€ ๋ง์•„์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ ์ž…๋‹ˆ๋‹ค. ๋ฐ˜๋Œ€๋กœ ๋งํ•˜๋ฉด ๋ˆ„๊ตฐ๊ฐ€ ๋กœ๊ทธ์ธ ํ•ด์„œ ๋ฐ๋ชฌ์„ ์‹œ์ž‘์‹œ์ผฐ๋‹ค๋ฉด ๋กœ๊ทธ์•„์›ƒํ•  ๋•Œ ํ•ด๋‹น ๋ฐ๋ชฌ์€ ๊ณ„์†ํ•ด์„œ ์‚ด์•„ ์žˆ์–ด์•ผ ํ•œ๋‹ค๋Š” ๋ง๋„ ๋ฉ๋‹ˆ๋‹ค.
 
์ด์ œ ์ด๋Ÿฌํ•œ ํŠน์ง•์„ ๊ฐ–๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์„ ๋‹จ๊ณ„๋ณ„๋กœ ์•Œ์•„๋ณด๋„๋ก ํ•˜์ฃ .
 
 
2. ๋กœ๊ทธ ์•„์›ƒ์‹œ ํ”„๋กœ๊ทธ๋žจ ์ข…๋ฃŒ๋˜์ง€ ์•Š๊ฒŒ ํ•˜๊ธฐ
 
์šฐ์„  ๋ฐ๋ชฌ์€ ์•„๋‹ˆ๋”๋ผ๋„ ๋ฐ๋ชฌ๊ณผ ๋น„์Šทํ•˜๊ฒŒ ์ˆ˜ํ–‰ํ•˜๋ฉด ๊ณ„์†ํ•ด์„œ ์ž‘์—…์„ ์ˆ˜ํ–‰ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ ์•Œ์•„ ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
 
๊ธฐ๋ณธ ์†Œ์Šค๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
 
#include <stdio.h>

int work()
{
        FILE *fp;
        unsigned long count=0;

        fp=fopen("/tmp/daemon.out""wt");
        if(fp==NULL) {
                printf("File Open Error\n");
                return -1;
        }

        while(1){
                sleep(1);
                fprintf(fp, "%lu\n", count);
                fflush(fp);
                fprintf(stdout, "%lu\n", count++);
        }
        fclose(fp);

        return 0;
}

int main(int argc, char *argv[])
{
        work();

        return 0;
}
 
 
์œ„์˜ ํ”„๋กœ๊ทธ๋žจ์€ ๊ฐ„๋‹จํ•˜๋‹ˆ๊น ๋ณด์‹œ๋ฉด ์•„์‹œ๊ฒ ์ง€๋งŒ main()ํ•จ์ˆ˜๊ฐ€ ์ˆ˜ํ–‰๋˜๋ฉด work()๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
work()ํ•จ์ˆ˜๋Š” ๋ฌดํ•œ๋ฃจํ”„๋ฅผ ๋Œ๋ฉด์„œ 1์ดˆ๋งˆ๋‹ค "/tmp/daemon.out"ํŒŒ์ผ์— ์นด์šดํŒ…์„ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค.
๋˜ ํ‘œ์ค€์ถœ๋ ฅ์œผ๋กœ๋„ ๊ฐ™์€ ๊ฐ’์„ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์ž…๋‹ˆ๋‹ค.
์œ„์˜ ์†Œ์Šค๋ฅผ ์ปดํŒŒ์ผํ•˜์—ฌ daemon์ด๋ผ๋Š” ์‹คํ–‰ํŒŒ์ผ์„ ์ƒ์„ฑํ–ˆ๋‹ค๊ณ  ํ•˜๊ณ  ๋‹ค์Œ์˜ ๊ธ€๋“ค์„ ์ž‘์„ฑํ† ๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.
 
์ž ๊ทธ๋Ÿผ ๋กœ๊ทธ์•„์›ƒ์ด ๋ ๋•Œ ์–ด๋–ค ํ˜„์ƒ์ด ์ผ์–ด๋‚ ์ง€์— ๋Œ€ํ•ด ํ•œ๋ฒˆ ์•Œ์•„๋ณด๋„๋ก ํ•˜์ฃ .
 
๋กœ๊ทธ์•„์›ƒํ•˜๊ฑฐ๋‚˜ ํ•ด๋‹น ํ„ฐ๋ฏธ๋„์ด ๋Š๊ธฐ๊ฒŒ ๋˜๋ฉด OS ํ•ด๋‹น ํ„ฐ๋ฏธ๋„์„ ์ œ์–ด๋‹จ๋ง๋กœ ์‚ฌ์šฉํ•˜๋˜ ๋ชจ๋“  ํ”„๋กœ๊ทธ๋žจ์—๊ฒŒ ํŠน๋ณ„ํ•œ ์‹ ํ˜ธ๋ฅผ ๋ณด๋‚ด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
์ด ์‹ ํ˜ธ๊ฐ€ SIGHUP, ์ฆ‰, Hangup ์‹œ๊ทธ๋„์ž…๋‹ˆ๋‹ค.
์ผ๋ฐ˜์ ์ธ ํ”„๋กœ๊ทธ๋žจ์€ ์ด Hangup ์‹œ๊ทธ๋„์„ ๋ฐ›์œผ๋ฉด ์ •์ƒ์ข…๋ฃŒ๋ฅผ ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
๋ญ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์•Œ์•„์„œ ์ •์ƒ์ข…๋ฃŒ ํ•œ๋‹ค๊ธฐ ๋ณด๋‹ค๋Š” ์ด ์‹œ๊ทธ๋„์„ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋ผ๋Š” ๋ฃจํ‹ด์„ ๊ตฌํ˜„ํ•˜์ง€ ์•Š์€ ํ”„๋กœ์„ธ์Šค๋Š” ์กฐ์šฉํžˆ OS๊ฐ€ ์ฃฝ์ด๋Š” ๊ฒƒ์ด์ฃ .
 
OS์— SIGHUP์„ ๋ฌด์‹œํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” 'nohup'์ด๋ผ๋Š” ์‰˜๋ช…๋ น์–ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
์ผ๋ฐ˜์ ์ธ ์‚ฌ์šฉ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
 
#nohup daemon&amp;amp;
 
์œ„์˜ ๋ช…๋ น์–ด ์ค‘ daemon์€ ๋ฐ๋ชฌ ํ”„๋กœ๊ทธ๋žจ์˜ ์ด๋ฆ„์ด๊ณ  ๋งˆ์ง€๋ง‰ &๋Š” ์ด ๊ธ€์˜ ์ฃผ์ œ์™€๋Š” ์ƒ๊ด€์—†์ง€๋งŒ ๋ฐฑ๊ทธ๋ผ์šด๋“œ๋กœ ์‹คํ–‰ํ•ด์„œ ํ”„๋กฌํ”„ํŠธ๋ฅผ ๋‹ค์‹œ ์–ป๊ธฐ ์œ„ํ•จ์ž…๋‹ˆ๋‹ค.
์ด๋ ‡๊ฒŒ daemon์„ ์‹คํ–‰ํ•œ ๋’ค ๋กœ๊ทธ์•„์›ƒํ•˜๊ฑฐ๋‚˜ ๋‹จ๋ง๊ธฐ๋ฅผ ๋Š๊ณ  ๋‹ค์‹œ ์ ‘์†ํ•œ ๋‹ค์Œ "ps -ef | grep daemon" ๋ช…๋ น์„ ํ†ตํ•ด ๋ณด์‹œ๋ฉด daemon์ด ์‚ด์•„ ์žˆ์Œ์„ ๋ณด์‹ค ์ˆ˜ ์žˆ์œผ์‹ค ๊ฒƒ ์ž…๋‹ˆ๋‹ค.
๋˜ํ•œ "tail -f /tmp/daemon.out" ํ•ด์„œ ๋ณด์‹œ๋ฉด ์‚ด์•„ ์žˆ์„ ๋ฟ ๋”๋Ÿฌ ์›๋ž˜์˜ ๊ธฐ๋Šฅ๋„ ์ •์ƒ์ ์œผ๋กœ ์ˆ˜ํ–‰ ํ•˜๊ณ  ์žˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
 
๊ทธ๋Ÿฐ๋ฐ ์—ฌ๊ธฐ์„œ ์›๋ž˜ daemon์€ ํŒŒ์ผ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํ™”๋ฉด์—๋„ ์นด์šดํŒ… ๋ฒˆํ˜ธ๋ฅผ ์ถœ๋ ฅํ•˜๋„๋ก ๋˜์–ด ์žˆ์—ˆ๋Š”๋ฐ ์œ„์˜ ๋ช…๋ น์˜ ์ˆ˜ํ–‰ ํ›„์—๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ๋ฉ”์‹œ์ง€๋งŒ ๋‚จ๊ธฐ๊ณ  ๋‚˜ํƒ€๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
 
appending output to `nohup.out'<br />
 
์ด๋Š” nohup ๋ช…๋ น์–ด๊ฐ€ daemon์˜ ํ‘œ์ค€ ์ถœ๋ ฅ์„ ํ˜„์žฌ ๊ฒฝ๋กœ์˜ 'nohup.out'์ด๋ผ๋Š” ํŒŒ์ผ๋กœ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ์‹œ์ผฐ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
 
์–ด์ฐŒ๋˜์—ˆ๊ฑด ์‰˜์—์„œ ์ œ๊ณตํ•˜๋Š” ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ๋ฐ๋ชฌ๊ณผ ์œ ์‚ฌํ•œ ๊ธฐ๋Šฅ์„ ํ•˜๋„๋ก ํ•ด ๋ณด์•˜๋„ค์š”. 
 
์ž ์ด๋ฒˆ์—๋Š” 'nohup'๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ์‹œ์Šคํ…œ ํ•จ์ˆ˜๋กœ ๊ตฌํ˜„ํ•ด ๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.
 
๊ณจ์ž๋Š” ํ”„๋กœ๊ทธ๋žจ ๋‚ด์—์„œ SIGHUP์‹œ๊ทธ๋„์„ ๋ฌด์‹œํ•  ์ˆ˜ ์žˆ๋„๋ก ์ฝ”๋”ฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
 
 ์œ„ ํ•จ์ˆ˜์— #include <signal.h> ๋ฅผ ํฌํ•จํ•˜๊ณ  mainํ•จ์ˆ˜๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ณ ์นฉ๋‹ˆ๋‹ค.
 
 
int main(int argc, char *argv[])
{
        signal(SIGHUP, SIG_IGN);

        work();

        return 0;
}
 
 
์ง€๊ธˆ ๋ถ€ํ„ฐ๋Š” work()ํ•จ์ˆ˜์˜ ํ‘œ์ค€ ์ถœ๋ ฅ์ด ๊ท€์ฐฎ์•„ ์ง€๋ฏ€๋กœ ํ‘œ์ค€ ์ถœ๋ ฅ์œผ๋กœ ๋‚ด๋ณด๋Š” ๋ฌธ์žฅ์€ ์ ์ ˆํžˆ ์‚ญ์ œํ•˜์…”๋„ ์ข‹์Šต๋‹ˆ๋‹ค.  
์œ„์˜ main()ํ•จ์ˆ˜๋Š” signal()ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด SIGHUP์‹œ๊ทธ๋„์„ ๋ฌด์‹œํ•˜๋„๋ก ์„ค์ • ํ•œ ๋’ค work()ํ•จ์ˆ˜๋ฅผ ์ˆ˜ํ–‰ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
 
์ปดํŒŒ์ผ ํ›„ ํ…Œ์ŠคํŠธ๋Š” ์—ฌ๋Ÿฌ๋ถ„์˜ ๋ชซ์œผ๋กœ ํ•˜๊ตฌ์š”.
 
SIGHUP์„ ๋ฌด์‹œํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์•„๋‹ˆ์ง€๋งŒ ๋˜ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์ด ์žˆ๋Š”๋ฐ ์ด๋Š” ํ”„๋กœ์„ธ์Šค ๋‚ด์—์„œ ์ž์‹ ์˜ ๊ทธ๋ฃน์•„์ด๋””๋ฅผ ๋ฐ”๊พธ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
 
์ด๋Š” ๋กœ๊ทธ ์•„์›ƒ์‹œ ํ˜„์žฌ ํ„ฐ๋ฏธ๋„์„ ์ œ์–ด ๋‹จ๋ง๊ธฐ๋กœ ํ•˜๊ณ  ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค์— OS๊ฐ€ SIGHUP์‹œ๊ทธ๋„์„ ๋ณด๋‚ผ ๋•Œ ์‰˜ํ”„๋กœ์„ธ์Šค์˜ ์•„์ด๋””๋ฅผ ๊ทธ๋ฃน์•„์ด๋””๋กœ ๊ฐ–๋Š” ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค์—๊ฒŒ ๋ณด๋‚ธ๋‹ค๋Š” ๊ฒƒ์— ์ฐฉ์•ˆํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
 
์ฆ‰, ํ”„๋กœ๊ทธ๋žจ์€ ํŠน์ • ์‰˜ํ”„๋กœ์„ธ์Šค์—์„œ ์ˆ˜ํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ผ๋ฐ˜์ ์œผ๋กœ ํ”„๋กœ์„ธ์Šค ๊ทธ๋ฃน์•„์ด๋””๋Š” ์ˆ˜ํ–‰ ํ™˜๊ฒฝ์ด ๋˜์—ˆ๋˜ ์‰˜ํ”„๋กœ์„ธ์Šค ์•„์ด๋””๋ฅผ ๊ฐ–๊ฒŒ ๋˜๋Š”๋ฐ ์ด๋ฅผ ํ”„๋กœ์„ธ์Šค ๋‚ด์—๊ฒŒ ๋ฐ”๊พธ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. 
 
int main(int argc, char *argv[])
{
        int newpgid;

        newpgid = setpgrp();

        work();

        return 0;
}
 
์œ„์˜ ์†Œ์Šค์— ๋ณด์ด๋Š” setpgrp()ํ•จ์ˆ˜๋Š” ์ž์‹ ์˜ ํ”„๋กœ์„ธ์Šค ๊ทธ๋ฃน์„ ์ž์‹ ์˜ ํ”„๋กœ์„ธ์Šค์•„์ด๋””๋กœ ๋ฐ”๊ฟ”์ค๋‹ˆ๋‹ค.
์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋กœ๊ทธ์•„์›ƒ์‹œ ์ด ํ”„๋กœ์„ธ์Šค๋Š” ์•„์˜ˆ SIGHUP์‹œ๊ทธ๋„์„ ๋ฐ›์ง€๋„ ์•Š์œผ๋ฏ€๋กœ ์ข…๋ฃŒ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
 
์ž ์—ฌ๊ธฐ๊นŒ์ง€๋Š” ๋ฐ๋ชฌ ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“œ๋Š” ๋ฒ•์ด๋ผ๊ธฐ ๋ณด๋‹ค๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ํ”„๋กœ์„ธ์Šค์—์„œ ์ผ์–ด๋‚˜๋Š” ์ผ๊ณผ ์ด๋“ค์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•, ๊ทธ๋ฆฌ๊ณ  ๊ฐ„๋‹จํžˆ ๋ฐ๋ชฌ๊ณผ ์œ ์‚ฌํ•œ ํšจ๊ณผ ๋‚ด๊ธฐ๋ผ๊ณ  ์ƒ๊ฐํ•˜์‹œ๋ฉด ๋  ๋“ฏ ์‹ถ์Šต๋‹ˆ๋‹ค.
 
 
3. fork์— ์˜ํ•œ Daemon๋งŒ๋“ค๊ธฐ
 
 
์œ„์—์„œ ์ด์•ผ๊ธฐ ํ•œ ๋ฐฉ๋ฒ•๋“ค๋„ ๋ญ ์ž˜๋ชป๋œ ๋ฐฉ๋ฒ•๋“ค์€ ์•„๋‹ˆ์ง€๋งŒ ์ผ๋ฐ˜์ ์œผ๋กœ๋Š” ์ด์ œ๋ถ€ํ„ฐ ์ด์•ผ๊ธฐ ํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ์ฃผ๋กœ ๋ฐ๋ชฌ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
main()ํ•จ์ˆ˜๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฐ”๊พธ์„ธ์š”.
 
int main(int argc, char *argv[])
{
        int pid;

        pid=fork();
        switch(pid){
        case -1:
                fprintf(stderr, "Fork Error\n");
                break;
        case 0:         // child
                break;
        default:        // parent
                return 0;
        }

        work();

        return 0;
}
 
์œ„์˜ main()ํ•จ์ˆ˜๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ์‹œ์ž‘๋˜์ž ๋งˆ์ž fork()๋ฅผ ์ˆ˜ํ–‰ํ•ด์„œ ์ž์‹ํ”„๋กœ์„ธ์Šค๋Š” work()ํ•จ์ˆ˜๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  ๋ถ€๋ชจํ”„๋กœ์„ธ์Šค๋Š” ์ข…๋ฃŒํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋Ÿฌ๋ฉด ์‚ฌ์‹ค ์ž์‹ํ”„๋กœ์„ธ์Šค๋Š” ์•„์ง ์‚ด์•„ ์žˆ๋Š”๋ฐ ๋ถ€๋ชจํ”„๋กœ์„ธ์Šค๊ฐ€ ํ„ฐ๋ฏธ๋„๊ณผ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์—ˆ๋Š”๋ฐ ์‚ฌ๋ผ์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๊ณ ๋กœ ์ž์‹ ํ”„๋กœ์„ธ์Šค๋Š” ์ œ์–ด๋‹จ๋ง๊ธฐ๋ฅผ ๊ฐ€์ง€์ง€ ์•Š๊ฒŒ ๋˜๊ณ  ๋ถ€๋ชจ๊ฐ€ ์—†์œผ๋ฏ€๋กœ ๊ณ ์•„ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋˜์—ˆ๋„ค์š”.
์ด๋ ‡๊ฒŒ ๊ณ ์•„ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด OS๋Š” ์ด ๊ณ ์•„ ํ”„๋กœ์„ธ์Šค๋ฅผ initํ”„๋กœ์„ธ์Šค์˜ ์ž์‹์œผ๋กœ ๋งŒ๋“ค์–ด ์ค๋‹ˆ๋‹ค.
๋ถ€๋ชจ,์ž์‹,๊ณ ์•„๋ฅผ ์ด์•ผ๊ธฐ ํ–ˆ์œผ๋‹ˆ ์ž…์–‘์ด๋ผ๊ณ  ํ•ด์•ผ ํ• ๊นŒ์š”? ใ…‹ใ…‹ใ…‹
ํ•˜์ง€๋งŒ ์›๋ž˜ initํ”„๋กœ์„ธ์Šค๋Š” 1๋ฒˆ ํ”„๋กœ์„ธ์Šค๋กœ์„œ ์กฐ์ƒ ํ”„๋กœ์„ธ์Šค์— ํ•ด๋‹น๋จ์œผ๋กœ ์ž…์–‘์ด๋ผ๊ณ  ํ•˜๊ธฐ๋Š” ์ข€ ๊ทธ๋ ‡๋„ค์š”.
 
์•„๋ฌดํŠผ ์œ„์˜ ํ”„๋กœ๊ทธ๋žจ์€ ์•„๋ฌด ๋ฌธ์ œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ข€๋น„๊ฐ€ ๋ฐœ์ƒํ•˜์ง€๋„ ์•Š๊ตฌ์š”.
 
ํ•˜์ง€๋งŒ ์ด๋Ÿฐ ์ผ€์ด์Šค๋ฅผ ์ƒ๊ฐํ•ด ๋ณด์ฃ .
daemon๋„ ํ”„๋กœ์„ธ์Šค์ด๋ฏ€๋กœ ํ˜„์žฌ ์ž‘์—…๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๊ฐ–์Šต๋‹ˆ๋‹ค.
๊ทธ๋ž˜์„œ ์ด daemon์ด ์‹คํ–‰๋œ ํ›„ daemon์„ ์‹คํ–‰ ์‹œ์ผฐ๋˜ ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์†ํ•œ ํŒŒ์ผ์‹œ์Šคํ…œ์„ "umount" ์‹œํ‚ค๋ ค ํ•œ๋‹ค๋ฉด OS๋Š” ํ•ด๋‹น ํŒŒ์ผ์‹œ์Šคํ…œ์ด ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋‹ค๊ณ  umount ํ•˜์ง€ ๋ชปํ•œ๋‹ค๊ณ  ํ•  ๊ฒƒ ์ž…๋‹ˆ๋‹ค.
์ด๋Ÿฐ ๊ฒฝ์šฐ ํ•ด๋‹น ๋ฐ๋ชฌ์„ ๋‚ด๋ ค์•ผ ํ•˜๋Š”๋ฐ...
๋”์šฑ ๋‚˜์œ ๊ฒฝ์šฐ๋Š” ์–ด๋–ค ๋ฐ๋ชฌ์ด ์ด ํŒŒ์ผ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”์ง€๋ฅผ ์•Œ๊ธฐ๊ฐ€ ํž˜๋“ค๋‹ค๋Š” ๊ฒƒ์ด์ฃ .
๊ทธ๋ž˜์„œ ๋ฐ๋ชฌ์€ ๋ฐ๋ชฌ์ด ๋˜๊ธฐ ์ „์— ํ˜„์žฌ ๊ฒฝ๋กœ๋ฅผ "/'์™€ ๊ฐ™์ด "umount"๋  ์ˆ˜ ์—†๋Š” ๊ณณ์œผ๋กœ ์˜ฎ๊ธฐ๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.
 
๋˜ ํ•œ๊ฐ€์ง€ ๊ณ ๋ คํ•ด์•ผ ํ•  ๊ฒƒ์€ ํ˜„์žฌ daemon์€ ๋ญ ํŒŒ์ผ์— ์ˆซ์ž๋งŒ ์ ๊ณ  ์žˆ์ง€๋งŒ ์—ฌ๋Ÿฌ๋ถ„์ด ๋งŒ๋“œ๋Š” deamon์€ ์–ด๋–ค ์ผ์„ ํ•˜๊ฒŒ ๋  ์ง€ ์‚ฌ์‹ค ๋ชจ๋ฆ…๋‹ˆ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด daemon์ด ๋˜ fork๋ฅผ ํ•ด์„œ ์ž์‹ ํ”„๋กœ์„ธ์Šค๋“ค์„ ๊ฐ–์„ ์ˆ˜๋„ ์žˆ๊ณ  exec()ํ•จ์ˆ˜๋‚˜ system()ํ•จ์ˆ˜์— ์˜ํ•ด ์•„์˜ˆ ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ ์‹œํ‚ฌ ์ˆ˜๋„ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด๋•Œ ์ƒˆ๋กœ ์ƒ์„ฑ๋˜๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ํ˜„์žฌ daemon์ด ์ œ์–ด ํ•  ์ˆ˜ ์—†๋‹ค๋ฉด ์ด ๋˜ํ•œ ๋ฌธ์ œ์ผ ์ˆ˜ ์žˆ๊ฒ ์ฃ ?
๊ทธ๋ž˜์„œ ๋ฐ๋ชฌํ”„๋กœ์„ธ์Šค๋Š” ๋ฐ๋ชฌ์ด ๋œ ์ง ํ›„ ์ž์‹ ์ด ์†ํ•œ ํ”„๋กœ์„ธ์Šค ๊ทธ๋ฃน์˜ ๋ฆฌ๋”๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด ์ƒˆ๋กœ์šด ํ”„๋กœ์„ธ์Šค ์„ธ์…˜์„ ๋งŒ๋“ค๊ณ  ์ž์‹ ์ด ๋ฆฌ๋”๊ฐ€ ๋œ ํ›„ ๋‹ค์Œ ์ž‘์—…๋“ค์„ ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.  ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ์„ ํ•˜๋Š” ํ•จ์ˆ˜๊ฐ€ ๋ฐ”๋กœ setsid()๋ผ๋Š” ํ•จ์ˆ˜ ์ž…๋‹ˆ๋‹ค. (์ฐธ์กฐ: http://teamblog.joinc.co.kr/yundream/226)
 ์•„๋ž˜ ์†Œ์Šค๋Š” chdir()๊ณผ setsid()ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์œ„์—์„œ ์ด์•ผ๊ธฐํ•œ ๋‚ด์šฉ์„ ๋ฐ˜์˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
 
int main(int argc, char *argv[])
{
        int pid;

        pid=fork();
        switch(pid){
        case -1:
                fprintf(stderr, "Fork Error\n");
                break;
        case 0:         // child
                break;
        default:        // parent
                return 0;
        }

        chdir("/");
        setsid();

        work();

        return 0;
}
 
 
์ž ์—ฌ๊ธฐ๊นŒ์ง€ ํ•˜๋ฉด ๋ญ ๋ฐ๋ชฌ์ด ์ž˜ ๋งŒ๋“ค์–ด ์ง„ ๊ฒƒ ์ž…๋‹ˆ๋‹ค.
 
์ถ”๊ฐ€๋กœ ์‹ค์ œ ๋ฐ๋ชฌ์„ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ•˜์‹ค ๋•Œ ์ฃผ์˜ํ•˜์‹ค ์ ์€ ์‹œ๊ทธ๋„์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋ฅผ ๊ผญ ํ•˜์‹œ๋ผ๋Š” ๊ฒƒ ์ž…๋‹ˆ๋‹ค.
์œ„์˜ ์ƒ˜ํ”Œ ์†Œ์Šค๋Š” ๋ญ ํŠน๋ณ„ํ•˜๊ฒŒ ์‹œ๊ทธ๋„ ์ฒ˜๋ฆฌ๋ฅผ ํ• ๊ป˜ ๋”ฑํžˆ ์—†์ง€๋งŒ ์˜ˆ๋ฅผ ๋“ค์–ด ์›น์„œ๋ฒ„์™€ ๊ฐ™์ด ํ†ต์‹  ํ”„๋กœ๊ทธ๋žจ์ธ ๊ฒฝ์šฐ SIG_PIPE์™€ ๊ฐ™์€ ์‹œ๊ทธ๋„์„ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
 
 
4. ์˜ค๋šœ๊ธฐ ๊ฐ™์€ Daemon๋งŒ๋“ค๊ธฐ
 
๋งˆ์ง€๋ง‰์œผ๋กœ ์ด์•ผ๊ธฐ ํ•˜๋Š” ๊ฒƒ์€ ์ผ๋ฐ˜์ ์ธ ๋ฐ๋ชฌ์— ๋Œ€ํ•œ ์ด์•ผ๊ธฐ๋Š” ์•„๋‹ˆ๊ตฌ์š” ํŒ๊ฐ™์€ ๊ฑฐ๋ผ๊ณ  ํ• ๊นŒ์š”?
๋ฐ๋ชฌ์€ ์„œ๋น„์Šค ์ œ๊ณตํ•˜๋Š” ํ”„๋กœ์„ธ์Šค์ด๋‹ค ๋ณด๋‹ˆ๊น...
์‹œ์Šคํ…œ์ด ์‹œ์ž‘๋˜๋ฉด ์‹œ์ž‘๋˜์„œ ๋๋‚ ๋•Œ ๊นŒ์ง€ ์‚ด์•„ ์žˆ์–ด์•ผ ํ•˜๋Š”๋ฐ...
์šฐ๋ฆฌ๊ฐ€ ์งœ๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ๋ฌธ์ œ๊ฐ€ ์—†๋‹ค๊ณ  ์žฅ๋‹ดํ•  ์ˆ˜๋Š” ์—†๊ฒ ์ฃ ? (์ €๋งŒ ๊ทธ๋Ÿฐ๊ฐ€?)
 
๋งŒ์•ฝ ๋ฐ๋ชฌ์œผ๋กœ ๋„์šด ํ”„๋กœ๊ทธ๋žจ์ด ์ฃฝ์œผ๋ฉด ํƒ€๊ฒฉ์ด ํฌ์ฃ .
๋ญ ๊ทธ ํƒ€๊ฒฉ์€ ํƒ€๊ฒฉ์ด๋”๋ผ๋„ ์„ธ์…˜์ด๋‚˜ ํŠธ๋žœ์žญ์…˜์ด ์ค‘์š”ํ•œ ์„œ๋น„์Šค๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ๋ผ๋ฉด ๋นจ๋ฆฌ ๋‹ค์‹œ ์‹œ์ž‘์ด๋ผ๋„ ์‹œ์ผœ์„œ ์ •์ƒํ™”๋ฅผ ์‹œํ‚ค๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
 
์ด๋Ÿฐ ๊ฒฝ์šฐ์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๋จผ์ € ์ผ๋ฐ˜ ๋ฐ๋ชฌ์„ ํ•˜๋‚˜ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์ผ๋ฐ˜ forkํ•˜์‹œ๊ตฌ์š”.
๊ทธ๋ฆฌ๊ณ  ๋‹ค์‹œ fork๋ฅผ ํ•ด์„œ ์ž์‹ํ”„๋กœ์„ธ์Šค๋Š” ์„œ๋น„์Šค๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ตฌ์š” ๋ถ€๋ชจํ”„๋กœ์„ธ์Šค๋Š” ์ž์‹์ด ์ข…๋ฃŒ๋˜๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค.
๊ทธ๋Ÿฐ๋ฐ ์ž์‹ํ”„๋กœ์„ธ์Šค๋Š” ๋ฌดํ•œ๋ฃจํ”„์ผ ๊ฑฐ๋‹ˆ๊น...
๋ถ€๋ชจํ”„๋กœ์„ธ์Šค ์ž…์žฅ์—์„œ ์ž์‹์ด ์ข…๋ฃŒ๋˜์—ˆ๋‹ค๋ฉด ์‹ค์ œ๋กœ๋Š” ๋ญ”๊ฐ€ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธด ๊ฒƒ์ด๊ฒ ์ฃ ?
์ด๋•Œ ๋‹ค์‹œ fork๋ฅผ ํ•ด์„œ ์œ„์˜ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค.
 
์†Œ์Šค๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.  
 
int main(int argc, char *argv[])
{
        int pid;
        int ret;

        if (( pid = fork()) < 0) {
                fprintf(stderr, "Main Fork Error\n");
                return 0;
        } else if(pid > 0) {
                return 0;
        }

        chdir("/");
        setsid();

        while(1) {
                if (( pid = fork()) < 0) {
                        fprintf(stderr, "Sub Fork Error\n");
                        return 0;
                } else if(pid == 0) {
                        break;
                } else if(pid > 0) {
                        wait(&ret);
                }
        }

        work();

        return 0;
}
 
 
๋งŒ์•ฝ ์ž์‹์ด ์ข…๋ฃŒ๋ ๋•Œ ์ƒํƒœ๋ฅผ ์•Œ๊ณ ์ž ํ•œ๋‹ค๋ฉด wait()ํ•จ์ˆ˜์˜ ์ธ์ž์ธ ret๊ฐ’์„ ์กฐ์‚ฌํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
 
์ž ์ด๋ ‡๊ฒŒ ํ•ด์„œ UNIX/LINUX์—์„œ Daemon๋งŒ๋“ค๊ธฐ์— ๋Œ€ํ•œ ์ด์•ผ๊ธฐ๋ฅผ ๋งˆ์น˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. 
๋ฐ˜์‘ํ˜•

+ Recent posts