
들어가기 전에 글을 읽기 귀찮다면 아래 유튜브를 봐도 좋을 것 같다!
fork함수 자체만 다루는 한국 영상이 없는 거 같아서 봤는데, 영어 잘 들리고 쉽게 설명해 주신다 ^^ 굿.
https://www.youtube.com/watch?v=cex9XrZCU14
🍴 fork() 함수란?
fork함수에 대해 궁금하게 된 경로는 C를 공부하다가 또는 리눅스시스템에 대해 공부하다가 일 수 있을 것 같다.
fork함수 자체는유닉스 계열 운영체제에서 사용하는 시스템 호출로, 프로세스를 생성하는 데 사용하는 함수이다.
fork를 호출하면 현재 프로세스(부모 프로세스)가 복사되어 새로운 프로세스(자식 프로세스)가 생성된다.
🧑🧒 부모 프로세스 복사?
fork는 부모 프로세스를 복제하여 자식 프로세스를 만드는 것이다. 그래서 부모와 자식 프로세스는 동일한 코드, 데이터, 파일 디스크립터 등을 갖지만, 각각의 독립적인 메모리 공간을 사용한다.
🔄 반환 값?
- 부모 프로세스에서 fork 호출 -> 자식 프로세스의 PID(프로세스 ID)를 반환
- 자식 프로세스에서 fork 호출 -> 0을 반환
- 에러가 발생 -> -1을 반환, 이 경우 자식 프로세스는 생성 X
🤲🏻병렬 실행?
- fork 이후 부모와 자식 프로세스는 동시에 실행
- 둘 다 fork 다음 코드부터 실행을 이어가지만, 각자의 주소 공간에서 독립적으로 실행
위의 내용은 일단 개념적인 내용이고 예시를 보면 될 것 같다.
🤖 예시
일단 C에서 fork함수를 쓰려면 #include <unistd.h> 헤더를 사용해야 한다.
[ 쉬운 예제 ]
#include <stdio.h>
#include <unistd.h>
int main() {
fork();
printf("Hello, World!\n");
return 0;
}
출력
Hello, World!
Hello, World!
- 부모 프로세스와 자식 프로세스는 동일한 코드에서 printf를 실행
- fork() 이후 두 프로세스가 독립적으로 실행되므로, 출력이 두 번 나타나게 된다.
[ 더 고민해 보면 좋을 예제 ]
#include <stdio.h>
#include <unistd.h>
int main() {
printf("A");
fork();
printf("B");
fork();
printf("C\n");
return 0;
}
출력 값은?
ABC
ABBC
ABCB
ABCC
출력 구조:
- 처음 printf("A")는 fork() 이전에 실행되므로 모든 프로세스에서 A가 출력
- 첫 번째 fork() 이후 printf("B")가 실행. 이제 프로세스는 두 개
- 두 번째 fork() 이후 printf("C\n")가 실행. 최종적으로 프로세스가 4개
-> 위 출력 결과는 운영체제의 스케줄러에 따라 달라질 수 있다
⭐️ 주의
fork를 반복 호출하여 무수히 많은 프로세스를 생성하면 시스템이 멈출 수 있다. 또한 자식 프로세스가 종료되지 않고 계속 남아 있으면 좀비 프로세스가 될 수 있으니 주의하자!

'개발 > C, C++' 카테고리의 다른 글
[C] malloc() calloc() 차이점, 동적메모리할당 (0) | 2024.11.26 |
---|---|
[C] C언어에서 힙 메모리와 스택 메모리 (0) | 2024.11.25 |
[ C++ ] C++의 단짝 STL 🧏🏻♀️ (0) | 2024.01.13 |
[C++] C++ 입출력 속도를 더 빠르게 처리하는 방법 (0) | 2023.07.08 |
[C언어] 프로그래밍 개론/C언어 개론 (0) | 2023.06.23 |