¸ÖƼ ÇÁ·Î¼¼½º ±â¹Ý ¼ÒÄÏ ÇÁ·Î±×·¥ °³¹ß
ÃÑ ÆäÀÌÁö ¼ö : 3224

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



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

Contents

1 ¸ÖƼ ÇÁ·Î¼¼½º¿¡ ´ëÇÏ¿©
2 ¼ÒÄÏ ÇÁ·Î±×·¥¿¡¼­ ¸ÖƼ ÇÁ·Î¼¼½º ±â¼úÀÇ ÀÀ¿ë
3 ¸ÖƼ ÇÁ·Î¼¼½º ±â¹Ý ¼­¹ö ÇÁ·Î±×·¥ Á¦ÀÛ

1 ¸ÖƼ ÇÁ·Î¼¼½º¿¡ ´ëÇÏ¿©

¸ÖƼ ÇÁ·Î¼¼½º´Â ½Ã½ºÅÛ ÇÁ·Î±×·¡¹Ö ¿µ¿ªÀ¸·Î ¸®´ª½º ½Ã½ºÅÛ ÇÁ·Î±×·¡¹Ö 5Àå ÇÁ·Î¼¼½º¿¡¼­ ÀÚ¼¼È÷ ´Ù·ç°í ÀÖÀ¸´Ï Âü°íÇϱ⠹ٶõ´Ù.

2 ¼ÒÄÏ ÇÁ·Î±×·¥¿¡¼­ ¸ÖƼ ÇÁ·Î¼¼½º ±â¼úÀÇ ÀÀ¿ë

BSD ¼ÒÄÏÀº ³×Æ®¿öÅ© Åë½ÅÀ» À§ÇÑ ±â¼ú¸¸À» Á¦°øÇÑ´Ù. ´Ù¼öÀÇ Å¬¶óÀÌ¾ðÆ®¸¦ ó¸®Çϱâ À§ÇÑ ±â¼úµîÀº Á¦°øÇÏÁö ¾Ê´Â´Ù. ¼ÒÄÏ ÇÁ·Î±×·¡¹Ö¿¡¼­ µ¥ÀÌÅÍ Åë½Å ÀÌ¿ÜÀÇ ±â¼úÀº µ¶¸³µÈ ±â¼ú·Î Á¸ÀçÇÑ´Ù. ±×·¯¹Ç·Î (´Ù¼öÀÇ Å¬¶óÀÌ¾ðÆ®¸¦ ó¸®ÇÏ´Â µîÀÇ)±â´ÉÀ» Ãß°¡Çϱâ À§Çؼ­´Â ´Ù¸¥ ±â¼úµéÀ» ÀÀ¿ëÇØ¾ß¸¸ ÇÑ´Ù.

´Ù¼öÀÇ Å¬¶óÀÌ¾ðÆ®¸¦ ó¸®Çϱâ À§ÇÑ ÀÀ¿ë ±â¼ú·Î¼­ ¸ÖƼ ÇÁ·Î¼¼½º ±â¼úÀº °¡Àå ¿À·¡µÈ ±â¼ú Áß Çϳª´Ù.

ÀÌ ¾ÆÀ̵ð¾î´Â ¼ÒÄÏ ¼­¹ö ÇÁ·Î±×·¡¹Ö¿¡¼­ "µè±â ¼ÒÄÏ"°ú "¿¬°á ¼ÒÄÏ"ÀÌ ºÐ¸®µÇ¾î Àִٴµ¥¿¡¼­ Ãâ¹ßÇÑ´Ù.


À§ ±×¸² ó·³ µè±â ¼ÒÄÏÀÌ ¿¬°á ¼ÒÄϰú ºÐ¸®µÇ¾î ÀÖÀ¸¹Ç·Î µè±â ¼ÒÄÏ¿¡ ÀÇÇØ¼­ »õ·Î¿î Ŭ¶óÀÌ¾ðÆ®°¡ ¿¬°á ¿äûÀ» ÇÑ°Ô È®ÀÎ µÇ¸é, »õ·Î¿î (Ŭ¶óÀÌ¾ðÆ®¿Í µ¥ÀÌÅÍ Åë½ÅÀ» Çϱâ À§ÇÑ)¿¬°á ¼ÒÄÏÀ» ¸¸µç´Ù. ÀÌÁ¦ »õ·Î¿î ÇÁ·Î¼¼½º¸¦ ¸¸µé¾î¼­ ÀÌ ¿¬°á ¼ÒÄÏÀ» ÀÌ¿ëÇØ¼­ Ŭ¶óÀÌ¾ðÆ®¿Í Åë½ÅÇϵµ·Ï ÇÏ´Â °ÍÀÌ´Ù.

3 ¸ÖƼ ÇÁ·Î¼¼½º ±â¹Ý ¼­¹ö ÇÁ·Î±×·¥ Á¦ÀÛ

¿ì¸®´Â ¼ÀÇ÷Π¾Ë¾Æº¸´Â ¼ÒÄÏÇÁ ·Î±×·¡¹Ö ¿¡¼­ ´ÜÀÏŬ¶óÀÌ¾ðÆ®¸¦ ¹Þ¾ÆµéÀÌ´Â ³×Æ®¿÷¼­¹ö¿¡ ´ëÇØ¼­ ¾Ë¾Æº»ÀûÀÌ ÀÖ´Ù. ÇÏÁö¸¸ ÀϹÝÀûÀÎ ¼­¹ö´Â ´ëºÎºÐ ´ÜÀÏ Å¬¶óÀÌ¾ðÆ®¸¦ ¹Þ¾ÆµéÀ̱⠺¸´Ù´Â ¿©·¯°³ÀÇ Å¬¶óÀÌ¾ðÆ®¸¦ µ¿½Ã¿¡ ¹Þ¾ÆµéÀÌ´Â °æ¿ì°¡ ´ëºÎºÐÀÌ´Ù. telnet, web, ftp, smtp, nntp µî ´ëºÎºÎºÐÀÇ ¼­¹ö°¡ Çѹø¿¡ ¿©·¯°³ÀÇ Å¬¶óÀÌ¾ðÆ® (ÀÌÇÏ ´ÙÁß¿¬°á)¸¦ ó¸®ÇÑ´Ù.

ÀÌ·¯ÇÑ ´ÙÁß¿¬°áÀ» ó¸®Çϱâ À§ÇØ 4°¡Áö Á¤µµÀÇ Ç¥ÁØÀûÀÎ ¹æ¹ýÀÌ Á¸ÀçÇϴµ¥, À̹øÀå¿¡¼­´Â Unix ȯ°æÇÏ¿¡¼­ ´ÙÁß¿¬°á󸮸¦ À§Çؼ­ °¡Àå ³Î¸® »ç¿ëµÇ´Â ¹æ¹ýÀÎ fork(2) ¿¡ ´ëÇØ¼­ ¾Ë¾Æº¸µµ·Ï ÇϰڴÙ.

fork´Â ³×Æ®¿öÅ© ÇÁ·Î±×·¡¹ÖÀ» À§ÇÑ ±â¹ýÀ̶ó±â º¸´Ù´Â ÀϹÝÀûÀÎ ½Ã½ºÅÛÇùÖÀ» À§ÇØ »ç¿ëµÇ´Â ±â¹ýÀ̰í, À̸¦ ³×Æ®¿÷Çùֿ¡ È®´ë½ÃÄѼ­ »ç¿ëÇѰÍÀ̶ó°í ÇÒ¼ö ÀÖ´Ù.

fork ´Â ÇÁ·Î¼¼½º¸¦ º¹»çÇØ¼­ ÇϳªÀÇ ÇÁ·Î±×·¥ÀÌ µ¿½Ã¿¡ ¿©·¯°³ÀÇ ¾÷¹«¸¦ ó¸® ÇÒ¼ö ÀÖµµ·Ï ÇÏ´Â ±â¹ýÀ¸·Î, fork ¸¦ »ç¿ëÇÏ°Ô µÇ¸é ºÎ¸ðÇÁ·Î¼¼½º¸¦ º¹»çÇÑ »õ·Î¿î ÇÁ·Î¼¼½º¸¦ »ý¼ºÇÏ°Ô µÈ´Ù. À̶§ °¡Àå ¸ÕÀú ½ÇÇàµÇ´Â ¿øº» ÇÁ·Î¼¼½º¸¦ "ºÎ¸ðÇÁ·Î¼¼½º"¶ó Çϰí ÀÌ ºÎ¸ðÇÁ·Î¼¼½º¿¡°Ô¼­ º¹»çµÈ ÇÁ·Î¼¼½º¸¦ "ÀÚ½ÄÇÁ·Î¼¼½º" ¶ó°í ÇÑ´Ù.

¿¹Á¦: fork.c
#include <unistd.h>  
#include <stdlib.h>  
 
int main(int argc, char **argv) 
{ 
    int pid;     
 
    pid = fork(); 
    if (pid > 0) 
    { 
        printf("ºÎ¸ð ÇÁ·Î¼¼½º\n"); 
        pause(); 
    } 
    else if (pid == 0) 
    { 
        printf("ÀÚ½Ä ÇÁ·Î¼¼½º\n"); 
        pause(); 
    } 
    else if (pid == -1) 
    { 
        perror("fork error : "); 
        exit(0); 
    } 
} 
 
ÇÁ·Î±×·¥À» ½ÇÇàÇÏ¸é ´ÙÀ½°ú °°Àº °á°ú°¡ ¹ß»ýÇÒ°ÍÀÌ´Ù.
[yundream@localhost test]# ./fork  
ºÎ¸ð ÇÁ·Î¼¼½º 
ÀÚ½Ä ÇÁ·Î¼¼½º 
 

ÀÌÁ¦ ps ¸¦ ÀÌ¿ëÇØ¼­ ÇÁ·Î¼¼½º »óȲÀ» Çѹø ¾Ë¾Æº¸µµ·Ï ÇÏÀÚ.
[yundream@localhost /root]# ps -eo "%U %p %P %c"  | grep fork 
yundream      1581  1483 fork 
yundream      1582  1581 fork 
 
ps ¿¡ -eo ¿É¼ÇÀ» »ç¿ëÇϸé ÀÏÁ¤ÇÑ Æ÷¸Ë¿¡ ÁØÇÑ ·¹Æ÷Æ®Ãâ·ÂÀ» °¡´ÉÇÏ°Ô µµ¿ÍÁØ´Ù. %U ´Â À¯ÀúÀ̸§ %p ´Â pid, %P ´Â ppid, %c ´Â command ¸¦ ³ªÅ¸³½´Ù. ÀÌ¿ÜÀÇ ÀÚ¼¼ÇÑ ³»¿ëÀ» ¾Ë°í ½Í´Ù¸é ps ÀÇ ¸ÇÆäÀÌÁö¸¦ ÂüÁ¶Çϱ⠹ٶõ´Ù. À§ÀÇ ³»¿ëÀ» º¸¸é º°µµÀÇ PID¸¦ °¡Áö´Â 2°³ÀÇ µ¿ÀÏÇÑ À̸§À» °¡Áø ÇÁ·Î ¼¼½º°¡ »ý°åÀ½À» ¾Ë¼ö ÀÖ´Ù. ±×¸®°í 1582 PID¸¦ °¡Áö´Â ÇÁ·Î¼¼½ºÀÇ PPID¸¦ º¸¸é ºÎ¸ð ÇÁ·Î¼¼½ºÀÇ PID°¡ 1581 ÀÓÀ» ¾Ë¼ö ÀÖ°í, À̸¦ ÅëÇØ¼­ 1581 ÀÌ ºÎ¸ð ÇÁ·Î¼¼½º 1582 °¡ ÀÚ½Ä ÇÁ·Î¼¼½ºÀÓÀ» ¾Ë¼ö ÀÖ´Ù.

¿ì¸®´Â forkÇÔ¼öÀÇ ÀÌ·¯ÇÑ Æ¯¼ºÀ» ÀÌ¿ëÇØ¼­ ´ÙÁß¿¬°áÀ» ¹Þ¾ÆµéÀÌ´Â ¼­¹ö¸¦ Á¦ÀÛÇÒ¼ö ÀÖ´Ù.

Á¦ÀÛ ÇÒ ÇÁ·Î±×·¥Àº ¿¡ÄÚ ¼­¹ö ÇÁ·Î±×·¥ÀÇ ¸ÖƼ ÇÁ·Î¼¼½º ¹öÀüÀÌ´Ù.

¿¹Á¦ : echo_server_mutiproc.c
001  #include <sys/types.h>  
002  #include <sys/stat.h>  
003  #include <sys/socket.h>  
004  #include <signal.h>  
005  #include <unistd.h>  
006  #include <netinet/in.h>  
007  #include <arpa/inet.h>  
008  #include <stdio.h>  
009  #include <stdlib.h>  
010  #include <string.h>  
011  
012  #define MAXLINE 1024 
013  int main(int argc, char **argv) 
014  { 
015      int server_sockfd, client_sockfd; 
016      int state, client_len; 
017      int pid; 
018   
019      struct sockaddr_in clientaddr, serveraddr; 
020   
021      char buf[MAXLINE]; 
022   
023      if (argc != 2) 
024      { 
025          printf("Usage : %s [port]\n", argv[0]); 
026      return 1;
027      }  
028   
029      // internet ½ºÆ®¸² ¼ÒÄÏÀ» ¸¸µéµµ·Ï ÇÑ´Ù.  
030      if ((server_sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) 
031      { 
032          perror("socket error : "); 
033          exit(0); 
034      }  
035      bzero(&serveraddr, sizeof(serveraddr)); 
036      serveraddr.sin_family = AF_INET; 
037      serveraddr.sin_addr.s_addr = htonl(INADDR_ANY); 
038      serveraddr.sin_port = htons(atoi(argv[1])); 
039   
040      state = bind(server_sockfd , (struct sockaddr *)&serveraddr, sizeof(serveraddr)); 
041      if (state == -1) 
042      { 
043          perror("bind error : "); 
044          exit(0); 
045      } 
046       
047      state = listen(server_sockfd, 5); 
048      if (state == -1) 
049      { 
050          perror("listen error : "); 
051          exit(0); 
052      } 
053       
054      signal(SIGCHLD, SIG_IGN); 
055      while(1) 
056      { 
057          client_sockfd = accept(server_sockfd, (struct sockaddr *)&clientaddr, 
058                                 &client_len); 
059          if (client_sockfd == -1) 
060          { 
061              perror("Accept error : "); 
062              exit(0); 
063          } 
064          printf("Accept Success!!\n");
065          pid = fork(); 
066          if (pid == 0)  
067          { 
068              while(1) 
069              { 
070                  memset(buf, 0x00, MAXLINE); 
071                  if (read(client_sockfd, buf, MAXLINE-1) <= 0) 
072                  { 
073                      close(client_sockfd); 
074                      exit(0); 
075                  } 
076                  printf(" > %s", buf);
077                  write(client_sockfd, buf, strlen(buf)); 
078              } 
079          } 
080          if (pid == -1) 
081          { 
082              perror("fork error : "); 
083          return 1;
084          } 
085      } 
086      close(client_sockfd); 
087  } 
088  

echo_server_mutiproc.c¸¦ ½ÇÇàÀ» ÇÑ ´ÙÀ½, ¿¡ÄÚ Å¬¶óÀÌ¾ðÆ®¸¦ ÀÌ¿ëÇØ¼­ Å×½ºÆ® ÇÏÀÚ.

forkÇÔ¼ö´Â µÎ°³ ÀÌ»óÀÇ Å¬¶óÀÌ¾ðÆ®¸¦ Á¦¾îÇÏ´Â ¾ÈÁ¤ÀûÀÎ ¹æ¹ýÀ» Á¦°øÇØÁØ´Ù. ÇϳªÀÇ Å¬¶óÀÌ¾ðÆ®¸¦ ó¸®ÇÏ´Ù°¡ ¹®Á¦°¡ »ý±â´õ¶óµµ ÇØ´ç ÀÚ½ÄÇÁ·Î¼¼½º¿¡°Ô¸¸ ¿µÇâÀ» ³¢Ä¡¹Ç·Î Àüü ¼­ºñ½º¿¡ ÁöÀåÀÌ »ý±æ¿°·Áµµ ¾ø°í, Äڵ忪½Ã ´Ù¸¥ select, poll, thread ¸¦ »ç¿ëÇϴ°Ϳ¡ ºñÇØ¼­ °£´ÜÇϸç, È帧µµ Á÷°üÀûÀÌ°í ¸íÈ®ÇÏ´Ù. µð¹ö±ëÀÌ ¿ëÀÌ ÇÏ´Ù¶ó´Â ÀåÁ¡µµ °¡Áö°í ÀÖ´Ù.

´ÜÁ¡Àº ÀÚ½ÄÇÁ·Î¼¼½º¸¦ »ý¼ºÇϴµ¥, ¸¹Àº ½Ã°£°ú ÀÚ¿øÀÌ ¼Ò¸ðÇÑ´Ù´Â Á¡ÀÌ´Ù.

¸¸¾à À¥¼­¹ö ó·³ ¿¬°á°ú Á¾·á°¡ ºó¹øÇÑ ¼­¹ö¶ó¸é, ¸ÖƼ ÇÁ·Î¼¼½ºº¸´Ù´Â ¸ÖƼ ½º·¹µå, ÀÔÃâ·Â ´ÙÁßÈ­µîÀÇ ±â¼úÀ» °í·ÁÇϵµ·Ï ÇÏÀÚ.

category_network
programing
category__5
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù.