ÃÑ ÆäÀÌÁö ¼ö : 3224
![]()
|
Facebook Joinc ±×·ì
Joinc QA »çÀÌÆ®
![]()
Tweet
joinc´Â Firefox¿Í chrome¿¡¼ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù. 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 forkps ¿¡ -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 ¸¦ »ç¿ëÇϴ°Ϳ¡ ºñÇØ¼ °£´ÜÇϸç, È帧µµ Á÷°üÀûÀÌ°í ¸íÈ®ÇÏ´Ù. µð¹ö±ëÀÌ ¿ëÀÌ ÇÏ´Ù¶ó´Â ÀåÁ¡µµ °¡Áö°í ÀÖ´Ù.
´ÜÁ¡Àº ÀÚ½ÄÇÁ·Î¼¼½º¸¦ »ý¼ºÇϴµ¥, ¸¹Àº ½Ã°£°ú ÀÚ¿øÀÌ ¼Ò¸ðÇÑ´Ù´Â Á¡ÀÌ´Ù.
¸¸¾à À¥¼¹ö ó·³ ¿¬°á°ú Á¾·á°¡ ºó¹øÇÑ ¼¹ö¶ó¸é, ¸ÖƼ ÇÁ·Î¼¼½ºº¸´Ù´Â ¸ÖƼ ½º·¹µå, ÀÔÃâ·Â ´ÙÁßȵîÀÇ ±â¼úÀ» °í·ÁÇϵµ·Ï ÇÏÀÚ.
|
|
|
|
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù. |
|