fork함수를 사용하면 새로운 프로세스를 하나 호출한다.
이때, 호출하는 자식 프로세스는 부모 프로세스의 메모리를 그대로 복사하여 가진다.
그리고 fork함수 호출 이후 각자의 메모리를 사용하여 실행된다.
#include <unistd.h> //header file
pid_t fork(void);
자식 프로세스의 PID값
, 자식 프로세스에서는 0
-1
#include <stdio.h>
#include <unistd.h>
int main(void)
{
int x = 0;
fork();
x = 1;
printf("PID : %d, x : %d\\n", getpid(), x);
return (0);
}
$ ./a.out
PID : 8270, x : 1
PID : 8271, x : 1
결국 x 에 값을 대입할 때, fork() 명령 이전에 대입하나 이후에 대입하나 상관이 없다! fork를 하면 자식 프로세스가 부모의 메모리를 그대로 복사해서 가지기 때문. 이후 같은 작업을 각 프로세스가 개별적으로 실행한다.
또한 자식 프로세스는 fork()함수를 실행하지 않기 때문에 이때 getpid()의 return value는 0이다. 따라서 getpid()의 return value를 기준으로 자식인지 부모인지 알 수 있다.