fork() 시스템 콜
- A process is created by the
fork()
system call.
- creates a new address space that is a duplicate of the caller.

- 자식 프로세스는 부모 프로세스의 program counter 도 복제하므로 부모 프로세스가 현재 어디까지 실행되었는지 알 수 있다
- 자식 프로세스는 부모 프로세스가 실행되고 있는 시점에 생성되었으므로 해당 위치의 다음 라인부터 시작된다
- 부모 프로세스가
fork()
를 실행하면 부모 프로세스의 PID 는 양수(정확히는 자식 프로세스의 ID) 를 가지고, 자식 프로세스는 0의 값을 가진다 → 부모 프로세스와 자식 프로세스 구분 가능
exec() 시스템 콜
- A process can execute a different program by the
exec()
system call.
- replaces the memory image of the caller with a new program.

- 프로세스를 fork() 한 후 exec() 을 호출한 경우

- 프로세스를 fork() 하지 않고 exec() 을 호출한 경우
- exec() 으로 현재 프로세스를 덮어씌운 후 실행하였으므로 그 이후의 코드는 실행되지 않는다
wait() 시스템 콜
- 프로세스 A 가
wait()
시스템 콜을 호출하면
- 커널은 child 가 종료될 때까지 프로세스 A 를 sleep 시킨다(block 상태) → 자식 프로세스를 대기함
- Child process 가 종료되면 커널은 프로세스 A 를 깨운다(ready 상태)

exit() 시스템 콜
- 프로세스의 종료
- 자발적 종료
- 마지막 statement 수행 후
exit()
시스템 콜을 통해 프로그램에 명시적으로 적어주지 않아도 main 함수가 리턴되는 위치에 컴파일러가 넣어줌
- 비자발적 종료
- 부모 프로세스가 자식 프로세스를 강제 종료시킴
- 자식 프로세스가 한계치를 넘어서는 자원 요청
- 자식에게 할당된 태스크가 더 이상 필요하지 않음
- 키보드로 kill, break 등을 친 경우
- 부모가 종료하는 경우
- 부모 프로세스가 종료하기 전에 자식들이 먼저 종료됨
프로세스와 관련한 시스템 콜
fork()
: create a child(copy)