µ¥¸ó(daemon) ÇÁ·Î±×·¥¿¡ ´ëÇÑ ÀÌÇØ
ÃÑ ÆäÀÌÁö ¼ö : 3224

Àüü ÇÔ¼ö/¿ë¾î»çÀü
Facebook Joinc ±×·ì   Joinc QA »çÀÌÆ®



joinc´Â Firefox¿Í chrome¿¡¼­ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼­´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù.


Daemon ÇÁ·Î±×·¥Àº º¸Åë telnet, httpd, mysql °ú °°Àº °¢Á¾ ¼­¹ö¸¦ background »óÅ¿¡¼­ µ¹¾Æ°¡´Â ÇÁ·Î±×·¥À» ¸»ÇÑ´Ù. ±×·¯³ª background ÇÁ·Î±×·¥°ú Daemon ÇÁ·Î±×·¥Àº ¾ö¿¬ÇÑ Â÷À̰¡ ÀÖ´Ù.

ÀϹÝÀûÀÎ background ÇÁ·Î±×·¥Àº Å͹̳ÎÀ» °¡ÁöÁö¸¸, Daemon ÇÁ·Î±×·¥Àº Å͹̳ÎÀ» °¡ÁöÁö ¾Ê´Â´Ù.
¿Ö³ÄÇÏ¸é º¸Åë µ¥¸óÇÁ·Î±×·¥Àº Ưº°ÇÑ ÀÏÀÌ ¾ø´ÂÇÑ »ç¿ëÀÚ¿Í »óÈ£´ëÈ­ÇÒ ÇÊ¿ä ¾øÀÌ ¾Æ¹«µµ ¸ð¸£°Ô ½ÇÇàµÇ¾î¾ß Çϱ⠶§¹®ÀÌ´Ù.
¶ÇÇÑ ¸ðµç µ¥¸ó ÇÁ·Î±×·¥Àº PPID Áï ºÎ¸ð ÇÁ·Î¼¼½º°¡ 1¹øÀ¸·Î ¼¼ÆÃµÇ¸ç, ÀÌ´Â µ¥¸ó ÇÁ·Î±×·¥ÀÇ °ü¸®ÇÁ·Î¼¼½º´Â 1¹ø pid ¸¦ °¡Áö´Â init °¡ ´ã´çÇÔÀ» ÀǹÌÇÑ´Ù.

[yundream@huhu loging_server]$ ./my_server
[yundream@huhu loging_server]$ ps -efjc
UID        PID  PPID  PGID   SID   CLS PRI STIME TTY          TIME CMD

yundream  4314  4219  4314  4175     -  30 15:36 ttyp0    00:00:00 ./my_server
[yundream@huhu loging_server]$ ./my_server -D
[yundream@huhu loging_server]$ ps -efjc
UID        PID  PPID  PGID   SID   CLS PRI STIME TTY          TIME CMD
yundream  4319     1  4319  4319     -  30 15:37 ?        00:00:00 ./my_server
À§ÀÇ È­¸éÀº my_server ¶õ ÇÁ·Î±×·¥À» ¹é±×¶ó¿îµå ¸ðµå·Î ½ÇÇà½ÃÄ×À» °æ¿ì¿Í -D ¿É¼ÇÀ» Á༭ µ¥¸ó¸ðµå·Î ½ÇÇà½ÃÄ×À»¶§ÀÇ ps Á¤º¸¸¦ º¸¿©ÁØ´Ù.
µ¥¸ó ÇÁ·Î¼¼½ºÀÇ °æ¿ì¸¦ º¸¸é ¾Ë°ÚÁö¸¸, PPID°¡ 1·Î ¼¼ÆÃµÇ¾î ÀÖÀ¸¸ç TTY Áï Å͹̳ÎÀ» °¡ÁöÁö ¾ÊÀ½À» ¾Ë¼ö ÀÖ´Ù. ±×·¡°í SID ¿ª½Ã ÀÚ½ÅÀÇ PID¿Í °°´Ù´Â°ÍÀ» ¾Ë¼ö ÀÖ´Ù.

±×·³ ÀÌÁ¦ ½ÇÁúÀûÀ¸·Î µ¥¸ó ÇÁ·Î±×·¥À» ¸¸µéµµ·Ï ÇØº¸ÀÚ, µ¥¸ó ÇÁ·Î±×·¥À» ¸¸µå´Â ÇÙ½ÉÀº ¹Ù·ÎÀ§¿¡¼­ ¼³¸íÇÑ´ë·Î Å͹̳ÎÀ» °¡ÁöÁö ¾ÊÀ¸¸ç PPID°¡ 1ÀÎ ÇÁ·Î¼¼½º¸¦ ¸¸µå´Â °ÍÀ¸·Î ¾Æ·¡¿Í °°Àº ÄÚµù ±ÔÄ¢À» ÀÌ¿ëÇØ¼­ ÀÛ¼º°¡´ÉÇÏ´Ù.
1. ¿ì¼± fork ¸¦ È£ÃâÇØ¼­ ÀÚ½ÄÇÁ·Î¼¼½º¸¦ »ý¼º½ÃŲ ´ÙÀ½ ºÎ¸ðÇÁ·Î¼¼½º¸¦ Á¾·á½ÃŲ´Ù.
2. setsid ¸¦ ÀÌ¿ëÇÏ¿© »õ·Î¿î ¼¼¼ÇÀ» ¸¸µé°í, ÇöÀçÇÁ·Î¼¼½º(ÀÚ½Ä)ÀÇ PID°¡ ¼¼¼ÇÀÇ Á¦¾î±ÇÀ» °¡Áöµµ·Ï ÇÑ´Ù.
3. chdir À» ÀÌ¿ëÇÏ¿© ÇÁ·Î¼¼½º°¡ ·çÆ®µð·ºÅ丮¿¡¼­ ÀÛ¾÷À» ¼öÇàÇϵµ·Ï º¯°æ½ÃÄÑÁØ´Ù.

1¹øÀ» ÀÌÇØÇÏ·Á¸é fork¿¡ ´ëÇÑ ÀÌÇØ°¡ ÇÊ¿äÇѵ¥, ±âº»ÀûÀ¸·Î ºÎ¸ðÇÁ·Î¼¼½º°¡ ÀÚ½ÄÇÁ·Î¼¼½º¸¦ fork ÇßÀ»°æ¿ì ÇØ´ç ÀÚ½ÄÇÁ·Î¼¼½ºÀÇ PPID ´Â ºÎ¸ðÇÁ·Î¼¼½ºÀÇ ID °¡µÈ´Ù. ±×·±µ¥ ÀÚ½ÄÀÌ Á×±âÀü¿¡ ºÎ¸ðÇÁ·Î¼¼½º°¡ Á×¾î¹ö¸®¸é ÀÚ½ÄÇÁ·Î¼¼½ºÀÇ PPID ´Â (´Ù½Ã¸»Çؼ­ ÀÚ½ÄÇÁ·Î¼¼½ºÀÇ ¼ÒÀ¯ ÇÁ·Î¼¼½º) ´©°¡µÉ±î ?
ºÎ¸ð ÇÁ·Î¼¼½º´Â ÀÌ¹Ì Á×¾úÀ½À¸·Î PPID°¡ µÉ¼ö ¾øÀ»°ÍÀÌ´Ù.
ÀÌ·² °æ¿ì ÀÚµ¿ÀûÀ¸·Î ÀÚ½ÄÇÁ·Î¼¼½ºÀÇ °ü¸® ÇÁ·Î¼¼½º´Â PID 1 ¹øÀÎ init °¡ ´ã´çÇÏ°Ô µÈ´Ù.

2¹øÀÇ setsid ´Â »õ·Î¿î »õ¼ÇÀ» »ý¼ºÇϱâ À§Çؼ­ »ç¿ëÇÑ´Ù. º¸Åë ¼¼¼ÇÀº ÀÚ½ÅÀÇ ¼¼¼ÇÀ» À§ÇÑ tty ¸¦ °¡Á®¾ß µÇ´Âµ¥, »õ·Î¿î ¼¼¼ÇÀ» »ý¼ºÇÏ¸é ¿©±â¿¡ tty ¸¦ ºÎ¿©ÇØ ÁÖ¾î¾ß ÇÑ´Ù. ±×·¸Áö ¾Ê°Ô µÉ°æ¿ì Å͹̳ÎÀ» °¡ÁöÁö ¾ÊÀº ¼¼¼ÇÀÌ »ý¼ºµÇ°Ô µÈ´Ù. ¼¼¼Ç(Session)¿¡ ´ëÇÑ ³íÀÇ´Â ´Ù¸¥ ¹®¼­¸¦ Âü°íÇϱ⠹ٶó°í, °£´ÜÈ÷ »ý°¢Çؼ­ ¼¼¼ÇÀ̶õ ÇÁ·Î±×·¥ ±×·ìÀÇ ¸ðÀ½À̶ó°í ÀÏ´ÜÀº »ý°¢ÇØÁÖ±æ ¹Ù¶õ´Ù.
¾î¶µç ÀÌ·¸°Ô ÇØ¼­ ÇÁ·Î¼¼½º´Â ÀڽŸ¸ÀÇ µ¶ÀÚÀûÀÎ ±æÀ» °È°Ô µÈ´Ù.

3¹øÀº ¼±ÅûçÇ×ÀÌ´Ù. ±»ÀÌ ÇØÁÖÁö ¾Ê¾Æµµ µÇÁö¸¸, µ¥¸ó ÇÁ·Î±×·¥¿¡¼­ ¿©·¯°¡Áö ÆÄÀÏÀ» ÀÐ°í ¾²´Â ÀÛ¾÷À» ÇÒ¶§ »ó´ë°æ·Î¸¦ ¸í½ÃÇÔÀ¸·Î½á ÀϾ´Â È¥µ¿À» ÇÇÇϱâ À§Çؼ­ ±ÇÀåÇÏ´Â ¹æ¹ýÀ̶ó°í »ý°¢ÇÏ¸é µÉ°ÍÀÌ´Ù.

µ¥¸óÇÁ·Î¼¼½ºÀÇ À§ÀÇ 3°¡Áö Á¶°Ç¸¸ ¸¸Á·½ÃÄÑÁÖ¸é µÈ´Ù. ±×·³ ¿¡Á¦¸¦ ÅëÇØ¼­ ½ÇÁ¦ µ¥¸ó ÇÁ·Î±×·¥À» ¸¸µé¾î¼­ ½ÇÇà½Ã۰í, ±× °á°ú¸¦ È®ÀÎÇØ º¸µµ·Ï ÇÏÀÚ.

¿¹Á¦ daemon.c
#include <sys/types.h> 
#include <sys/stat.h> 
#include <stdio.h> 
#include <fcntl.h> 

int main()
{
    pid_t   pid;

    if (( pid = fork()) < 0)
    exit(0);

    // ºÎ¸ðÇÁ·Î¼¼½º¸¦ Á¾·áÇÑ´Ù. 
    else if(pid != 0)
    exit(0);
    
    //setsid();
    chdir("/");

    // ¿©±â¿¡ ÇÁ·Î±×·¥ º»Ã¼¸¦ ³Ö´Â´Ù. 
    setsid();    
    while(1)
    {
    sleep(1);
    }
}
¾ÆÁÖ¾ÆÁÖ °£´ÜÇÏ°Ô µ¥¸óÇÁ·Î±×·¥À» ¸¸µé¼ö ÀÖÀ½À» ¾Ë¼ö ÀÖ´Ù.
ÀÌÁ¦ °á°ú¸¦ Çѹø È®ÀÎÇØ º¸µµ·Ï ÇÏÀÚ
[yundream@localhost test]$ ./daemon
[yundream@localhost test]$ ps -efjc | grep daemon
UID         PID  PPID  PGID   SID   CLS PRI STIME TTY          TIME CMD
yundream  18710     1 18710 18710     -  30 23:42 ?        00:00:00 ./daemon
PPID°¡ 1·Î µÇ¾î ÀÖ°í SID°¡ ÀÚ½ÅÀÇ PID·Î µÇ¾îÀÖÀ¸¸ç tty ¸¦ °¡ÁöÁö ¾ÊÀº ÇÁ·Î¼¼½º°¡ ¸¸µé¾îÁ³À½À» ¾Ë¼ö ÀÖÀ»°ÍÀÌ´Ù.
¸ðµç ÇÁ·Î±×·¥¿¡ À§ÀÇ Äڵ常 Ãß°¡½ÃÄÑÁÖ¸é ¾î·ÆÁö ¾Ê°Ô µ¥¸óÇÁ·Î±×·¥À» Á¦ÀÛÇÒ¼ö ÀÖÀ»°ÍÀÌ´Ù.
Cache Error
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù.