여러개를 forking하려 할때.

pok의 이미지

스크립트를 읽어와 스크립트 개수대로 forking을 하려합니다.

	pid_t afterForkPid = fork();
	if (afterForkPid > 0){
		if (argc != 2){printf("Please Check the parameter\n");exit(1);}
		lineNum = getLineNum(argv[1]);
		forkIndex = (pid_t*)malloc(sizeof(pid_t) * lineNum);
		forkIndex[0] = afterForkPid;
		for(int a=1; a < lineNum; a++){ //이미 한번 포킹 되었으니까 하나 적게 포킹.
			afterForkPid = fork();
			if (afterForkPid == 0){free(forkIndex);break;}//자식 프로세스는 여기서 바로 나가기
			forkIndex[a] = afterForkPid;
		}
	}

이상하게 fork하기전에 한 malloc이 자식프로세스에 생성이 되어서 메모리가 줄줄샙니다. 미봉책으로 break할때 free를 해줬는데, 생성되지 않아도 되는것이 생성된다는것은 역시 잘못된것 같은데요,

여러분들은 어떤식으로 요청에대한 forking을 하나요?

cinsk의 이미지

Quote:
fork하기전에 한 malloc이 자식프로세스에 생성이 되어서...

Child process는 parent process의 메모리 공간을 그대로 물려 받게 됩니다. 따라서 parent process가 malloc()한 영역은 child process에도 존재합니다.