|
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
|