ÇÁ·Î±×·¡¹Ö

 3198, 1/160 ȸ¿ø°¡ÀÔ  ·Î±×ÀΠ 
   rmb2013
   ÄܼÖÃâ·Â°ú ¸®´ÙÀÌ·º¼Ç À» ÅëÇÑ Ãâ·Â°á°ú°¡ ´Ù¸¥ÀÌÀ¯´Â ¹«¾ùÀϱî¿ä?

http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=3175 [º¹»ç]


¿î¿µÃ¼Á¦ ¼ö¾÷½Ã°£ °úÁ¦¸¦ ÇÏ´Ù°¡ ½Å±âÇÑ Çö»óÀ» º¸¾Ò³×¿ä.
ºÎ¸ð´Â ÀÚ½ÄÇÁ·Î¼¼½º 10°³¸¦ ¸¸µé°í,
ÀÚ½Ä ÇÁ·Î¼¼½º´Â
=>ÀÚ½ÅÀÌ ¸î¹øÂ°·Î »ý¼ºµÇ¾ú´ÂÁö,
=>±×¶§±×¶§Àǽð£À» Ç¥½ÃÇÏ´Â ¹®ÀåÀ» 1ms ´ÜÀ§ °£°ÝÀ¸·Î 100¹®ÀåÀ»  µ¿ÀÏÇÑ ÆÄÀÏ¿¡ Ãâ·Â

½ÃŰ´Â ÇÁ·Î±×·¥À» ÀÛ¼ºÇÏ´Â °ÍÀÔ´Ï´Ù.

Á¦°¡ ÀÛ¼ºÇÑ ¼Ò½º ÄÚµå´Â  ¾Æ·¡ ¿Í °°±¸¿ä.
test3.c

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <time.h>
#include <stdlib.h>

#define        C_NUM        10                //fork ½ÇÇà Ƚ¼ö - for¹®¿¡¼­ »ç¿ë.
#define P_NUM 100                //°¢ child °¡ Ãâ·ÂÇÒ ¹®Àå °³¼ö.

int main(void)
{
        int i,j,num=1;
        char f_name[]="result.txt";
        FILE *f;
        pid_t new_pid;
        pid_t root_pid;
        pid_t pid_stack[C_NUM];
        time_t second;
        struct tm *date;


        if((f=fopen(f_name,"a+"))==NULL)           //forkÀÌÀü¿¡ file À» ¿­¾î³õ°í.
        {  printf("fopen Err!\n\n");
                 exit(-1);
        }

        root_pid = getpid();

        printf("\nStart to call fork()\n");

        for(i=0; i < C_NUM ; i++)
        {
                if((new_pid = fork()) < 0)        //fork ¸¦ ¼öÇàÇϰí.
                {
                        printf("\n\nfork Err!\n\n");
                        exit(-1);
                }

                       if(new_pid == 0)                //Child ´Â ½Ã°£ Ãâ·ÂÈÄ Á¾·áÇÑ´Ù.
                       {
                for(j=0;j < P_NUM; j++)     // num ¹øÂ° ÇÁ·Î¼¼½º´Â P_NUM °³
                {                                                                                                  // ¹®ÀåÀ» Ãâ·Â ÇÑ´Ù.
                      time(&second);
                      date = localtime(&second);

                     fprintf(f,"[Process %d #%d] %2d:%2d:%2d\n",i,j,date->tm_hour,date->tm_min,date->tm_sec);
                     usleep(1000);
                }
                  fclose(f);
                        return 1;                                                                        // Child ¿¡¼­ Á¾·á½Ã 1 ¸®ÅÏ.
                }
                else
                {
                        pid_stack[i] = new_pid;
                        printf("\nNo.%d fork() is done\n",i);
                        //usleep(1000);
                }
        }

        for(i=0;i<C_NUM;i++)
        {
                wait(pid_stack[i]);
        }
        
        printf("\nParent process has finished.\n\n");
        
        fclose(f);

        return 0;

}

fprintf ´ë½Å¿¡ ±×³É Äֿܼ¡´Ù°¡ printf ¸¦ »ç¿ëÇØ¼­ Ãâ·Â½Ã۸é, Á¦°¡ ÀǵµÇÏ´Â ´ë·Î
¿©·¯ ÀÚ½Ä ÇÁ·Î¼¼½º µéÀÌ CPU¸¦ ¹ø°¥¾Æ°¡¸ç »ç¿ëÇØ¼­ µÚÁ×¹ÚÁ× ¼ø¼­°¡ ¼¯¿© Ãâ·ÂÀÌ µÇ´Âµ¥¿ä.

µ¿ÀÏÇÑ ÇÁ·Î±×·¥À» |more À» ÅëÇØ º»´Ù´øÁö,  ¾Æ´Ï¸é óÀ½ÄÚµå µ¥·Î fprintf ¸¦ »ç¿ëÇØ¼­
ÆÄÀÏ·Î Ãâ·ÂÀ»Çϸé,  »ý¼ºµÈ ÀÚ½Ä ÇÁ·Î¼¼½º º°·Î Á¤·ÄµÇ¾î¼­ º¸ÀÌ´Â. ½Å±âÇÑ È¿°ú°¡ ³ª¿À´õ±º¿ä...

°°Àº ÇÁ·Î±×·¥Àε¥, Äֿܼ¡ ¹Ù·Î »Ñ¸±¶§¶û ´Ù¸£°Ô º¸ÀÌ´Â °ÍÀϱî¿ä?


  Hit : 4352     Date : 2011/10/07 02:56