자식 프로세스의 관리 및 종료 ... fork() / execl() 인데 .. 오류가 있네요 ...
글쓴이: Sailor_moon / 작성시간: 화, 2012/03/06 - 11:21오후
안녕하세요, 지금 , fork (), execl() 을 이용한 멀티프로세싱 공부중인데 , 잘 안되어서
질문 올립니다.
pid_t* pid_array = malloc(sizeof(pid_t)*atoi(argv[1]))
.... 생략 ...
while (i<atoi(argv[1]))
{
pid_t j;
int test_exec;
printf("I am forking now...\n");
j = fork();
printf("%d\n",j);
if (j==0){
// Child process case
//test_exec= execl("/bin/echo","/bin/echo" ,"hi",NULL);
printf("callString: %s\n",callString);
test_exec = execl("./amazing_client","./amazing_client", c_id,argv[1],argv[2],argv[3],c_mazePort,logFileName,NULL);
if(test_exec <0){
printf("%s\n", strerror(errno));
}
printf("return value of %d",test_exec);
//execl("./amazing_client", callString);
}
else if (j<0){
printf("Failed the call fork()\n");
exit(1);
}
else {
pid_array[i] = j;
waitpid(pid_array[i], (int*)0, WNOHANG);
printf("I am a parents .. %d forked \n", i+1);
}
i++;
} // end of while ...
--i;
int count; // tracking child procedures ...
int stop_count;
while(1){
stop_count =0;
for(count =0; count <i; ++count){
if(waitpid(pid_array[count], (int*)0, WNOHANG)) ++stop_count; //Parents process will wait until every children has been done thier work
if (i == stop_count){
printf("%d children all stopped\n", count);
break;
}
}
}
free(pid_array);일단은 위와같은 소스구요, 인자값으로 받은 횟수 만큼 ,
부모 프로세스가 , 자식 프로세서로 다른 c 프로그램인 amazing_client 를 실행 시키는 것 입니다.
인자로 3을 받았다면 , 3개의 자식 프로세스가 , 클라이언트를 실행하면서 callString 인자를 가지고
amazing_client 를 실행 되게 하는 것인데, 마지막 자삭의 종료가 제대로 이루어 지질 않네요 .
고수분들 도와 주세요 ~
Forums:


댓글 달기