강의

멘토링

로드맵

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

젓인님의 프로필 이미지
젓인

작성한 질문수

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

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

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

작성

·

325

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번째를 타서 새로 또 만든 것 같네요... 그래도 도움이 될지 모르니 질문은 남기겠습니다 :((((((((((((.....

젓인님의 프로필 이미지
젓인

작성한 질문수

질문하기