📌 - 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()함수에 대해서 이해하기 훨씬 수월하고 더 빠르게 습득할 수 있는 것 같다. 많은 예제들을 보자.