프로세스는 보통 fork 시스템 콜을 통해 생성된다. 이 때 생성한 주체인 프로세스를 부모프로세스, 피 생성된 프로세스를 자식프로세스라고 한다. 부모와 자식은 1:N 관계가 될 수 있다. 그에 따라 전체적으로 프로세스 구조는 tree형태를 나타낼 것이다.
fork()의 수행은 부모 프로세스에서 일어나지만, fork()로부터의 리턴은 부모, 자식 모두에게 일어난다. 단, 부모 프로세스의 리턴값은 자식 프로세스의 고유번호(PID)이고 자식 프로세스의 리턴값은 0이다. 이렇게 리턴값을 다르게 설정한 이유는, fork()의 리턴값을 받아 이를 조건문에 활용해 다른 작업을 수행할 수 있도록 하기 위해서이다.
자식프로세스가 생성되면 사용자 문맥의 text 부분만 공유하고, data와 stack 공간은 별도로 생성되고 원래 값이 복사된다. 즉, 같은 이름이라도 각각 다른 값을 뜻하는 변수들을 가진다. PCB도 당연히 따로 생성된다.
exit가 호출되었을 때 wait 상에 있는 부모 프로세스에 종료 이벤트를 알려준다. 부모가 wait상태에 있지 않다면 자식 프로세스의 주소 공간과 할당 자원은 없어지지만, PCB는 그대로 유지된다. 이러한 상태를 좀비(zombie) 프로세스 상태라고 한다.
Zombie Process
Orphan Process
init Process