부모 프로세스(Parent process)가 자식 프로세스(children process) 생성한다.
프로세스는 자원을 필요로 한다.
운영체제로부터 받고, 부모와 공유한다.
한 번 생성되면 서로 경쟁하는 관계에 놓인다.
프로그램 카운터 위치만 복사해서 공유 → 복제 순으로 진행한다.

주소 공간(Address space)
fork() : 시스템 콜이 새로운 프로세스를 생성하는 것이다.
fork 다음에 이어지는 exec() : 시스템 콜을 통해 새로운 프로그램을 메모리에 올린다.

exit : 프로세스가 운영체제에게 시스템 콜을 넣어준다.
abort : 부모 프로세스가 자식의 수행을 종료시킨다.

fork() 이후 자식 프로세스 하나 만들어진다.
프로그램 카운터가 fork()를 가리키고 있었을 것이므로, fork() 다음 줄부터 실행한다.
부모는 fork()의 결과값이 양수 > 0, 자식은 fork()의 결과값이 0이다.


exec() 시스템 콜은 프로그램을 새로운 프로세스로 태어나게 하는 역할을 해준다.
execlp() : 기억을 잊고 새로운 프로그램을 덮어 씌워 실행시킨다.



wait() 시스템 콜을 호출하면 block 상태로 만들어 ready하게 만든다.
리눅스 명령어에 프로그램 이름을 넣으면 프로그램이 자식 프로세스가 되어 실행된다.

자발적 종료와 비자발적 종료가 있다.


Interprocess Communication(IPC)

Massage passing : 메시지를 전달하는 방법

Shared memory
