컴퓨터 구조/OS

[OS] - fork() 함수란?

Casteira 2023. 5. 20. 16:36

📌 - fork()?

    - 함수를 호출한 프로세스를 복사하는 기능
    - 원래 진행되던 프로세스는 부모, 복사된 프로세스를 자식이라고 한다.

    - fork() 함수는 프로세스 id, 즉 pid를 반환하는데 자식이라면 0이 반환 된다.

 

 

1️⃣ - 예시 1 - fork가 자식프로세스에서는 0을 반환하기 때문에 x=2를 출력하고 종료

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
 
int main(){
    
    pid_t pid;
    int x = 1;
 
    pid = fork();
    if(pid == 0){ /*Child*/
        printf("child: x=%d\n", ++x);
        exit(0);
    }
 
    /*Parent*/
    printf("parent: x=%d\n", --x);
    exit(0);
}

 

 

 

 

 

 

 

2️⃣  - 예시 2 - 중첩 fork()

 

int main()
{
	Fork();
	Fork();
	printf("hello\n");
	exit(0);
}

 

 

 

 

fork() 함수가 사용된 프로세스를 fork()함수를 사용하기 때문에 중첩이 되고, 프로세스의 자식 또한 자식을 생성해서 4개의 결과가 나오게 된다.

 

3️⃣ - 예시3 - 예시1번에서 exit를 안한 프로세스

 

int main()
{
    int a = 9;
    
    if (Fork() == 0)
        printf("p1 : a=%d\n", a--);
    printf("p2: a=%d\n", a++);
    exit(0);
}

 

이번 예시는 한번 직접 풀어보고 결과를 보면서 습득하면 더욱 좋을 것 같다.

 

 

 

 

이렇게 여러가지 예제를 보면 fork()함수에 대해서 이해하기 훨씬 수월하고 더 빠르게 습득할 수 있는 것 같다. 많은 예제들을 보자.