컴공생의 발자취

fork()_C언어(Linux) 본문

📖 이론/운영체제

fork()_C언어(Linux)

MNY 2022. 4. 28. 12:41
728x90
반응형

 

  • 동시에 2개 이상의 실행 흐름을 만들어 낼 수 있다.
  • 부모-자식 관계가 형성된다.
  • 실행하는 시점에 동일한 프로세스 이미지가 하나 더 생성된다.
  • 주소공간: 부모의 하위 중복, 자식이 프로그램을 로드한다.
  • fork() system: 호출을 통해 새로운 프로세스 생성
  • 프로세스의 메모리 공간을 새 프로그램으로 바꾸기 위해 fork() 뒤에 사용되는 exec()

 

c언어(Linux)

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

int main(int argc, char* argv[]){
	pid_t pid;
    pid = fork();
    if(pid<0){
    	fprintf(stderr, "fork failed");
        return 1;
    }
    else if(pid>0){ // 부모 프로세스 생성
    	printf("hello\n");
        wait(NULL); // 자식 프로세스가 끝날 때까지 기다린다.
    }
    else{ // 자식 프로세스
    	printf("hello\n"); 
    }
    
    return 0;
}

[ 실행결과 ]

 

wait(NULL)에 대해 모른다면... 이런 결과가 나온다...

왜 이렇게 나오는지 한참 찾아본 결과 wait(NULL)을 안해주면 부모 프로세스가 끝난 후 자식 프로세스의 값이 나오기 때문이라고 생각한다. 그렇기에 부모 프로세스에서 자식 프로세스가 끝날 때까지 기다려주는 wait(NULL)이 필요하다.

wait(NULL)주석처리 후 실행 결과

 

* 예제 문제 *

아래 코드의 실행 결과 Hello world는 몇 회 출력되는가?

#include <stdio.h>
#include <unistd.h>

int main(int argc, char* argv[]){
	fork();
    printf("Hello world\n");
    fork();
    printf("Hello world\n");
    return 0;
}
더보기

* 정답*

6회 출력

728x90
반응형

'📖 이론 > 운영체제' 카테고리의 다른 글

Process Control Block(PCB)  (0) 2022.05.10
process state diagram  (0) 2022.05.10
monolithic kernel VS micro kernel  (0) 2022.04.28
x86(CISC) VS ARM(RISC)  (0) 2022.04.28
IPC 종류와 특징  (0) 2022.04.11