인프런 커뮤니티 질문&답변

유영재님의 프로필 이미지
유영재

작성한 질문수

리눅스 시스템 프로그래밍 - 이론과 실습

프로세스 개념, 프로세스 생성 - 라이브 프로그래밍

프로세스 생성에 대한 질문입니다

작성

·

278

0

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/wait.h>
#include <sys/types.h>

int main(int argc, char **argv)
{
    int exit_status;
    pid_t pid;
    struct stat buf;

    memset(&buf, 0, sizeof(struct stat));
    
    printf("parent process:%d\n", getpid());    
    for(int i=0; i<2; i++) {
        pid = fork();
        if(pid == 0) {
            int n = 5;
            while(n--) {
                // stat("/proc/`getpid()`/stat", &buf);
                // printf("gid:%d pid:%d\n", (int)buf.st_gid, (int)getpid());
                printf("pid:%d\n", getpid());
                sleep(3);
            }
        }
        else if(pid > 0) {
            wait(&exit_status);
        }        
    }

    printf("Done...\n");
    return 0;
}

fork를 완전히 이해했다고 생각했는데, 제 생각 범위에서 일종의 bug 프로세스가 나오는데요....

코드를 보면 각각의 pid를 5번씩 출력하고 끝내야 하는데, 이 출력 마지막에 새로운 프로세스가 5번 더 출력이 되는데 왜 그런건가요....?

답변 2

0

런잇(ProgCoach4U)님의 프로필 이미지
런잇(ProgCoach4U)
지식공유자

:)

0

유영재님의 프로필 이미지
유영재
질문자

아....exit처리를 안해서 그런 것 같습니다.. 그래서 처음에 만들어진 pid가 for문 2번째를 타서 새로 또 만든 것 같네요... 그래도 도움이 될지 모르니 질문은 남기겠습니다 :((((((((((((.....

유영재님의 프로필 이미지
유영재

작성한 질문수

질문하기