Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C 언어에서 fork() 함수로 자식 프로세스 생성하는 방법

이 글에서는 C 언어에서 fork() 함수를 사용하여 자식 프로세스를 생성하는 방법을 알아봅니다. 또한 부모 프로세스와 자식 프로세스가 각각 서로 다른 작업을 수행하도록 만드는 방법도 함께 살펴보겠습니다.

fork()의 동작 원리

fork()가 호출되면 새로운 프로세스가 생성되며, 이때 반환값을 통해 현재 실행 중인 프로세스가 부모인지 자식인지 구분할 수 있습니다.

  • 반환값이 0보다 크면 → 현재 코드는 부모 프로세스에서 실행 중입니다. 이 경우 반환값은 자식 프로세스의 PID(프로세스 ID)입니다.
  • 반환값이 0이면 → 현재 코드는 자식 프로세스에서 실행 중입니다.
  • 반환값이 -1이면 → 프로세스 생성에 실패한 것입니다.

이러한 특성을 활용하면 if-else 문으로 각 프로세스마다 서로 다른 작업을 수행하도록 프로그램을 작성할 수 있습니다.

예제 코드

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

int main() {
    int n = fork(); // 프로세스 분할
    
    if (n > 0) { // n이 0이 아니면 부모 프로세스
        printf("Parent process \n");
    } else { // n이 0이면 자식 프로세스
        printf("Child process \n");
    }
    
    return 0;
}

실행 결과

soumyadeep@soumyadeep-VirtualBox:~$ ./a.out
Parent process
soumyadeep@soumyadeep-VirtualBox:~$ Child process
soumyadeep@soumyadeep-VirtualBox:~$

결과 분석

실행 결과를 보면 "Parent process"와 "Child process"가 모두 출력된 것을 확인할 수 있습니다. fork() 호출 시점에 프로세스가 복제되어 두 개의 독립적인 실행 흐름이 생기기 때문입니다.

흥미로운 점은 출력 순서가 매번 다를 수 있다는 것입니다. fork() 이후에는 부모 프로세스와 자식 프로세스가 운영체제 스케줄러에 의해 독립적으로 실행되기 때문에, 어떤 프로세스가 먼저 실행될지는 보장되지 않습니다. 따라서 위 예제에서는 부모 프로세스가 먼저 종료되어 셸 프롬프트가 표시된 후 자식 프로세스의 출력이 뒤늦게 나타난 것입니다.