- 자식은 부모의 공간을 복사함
- 자식은 그 공간에 새로운 프로그램을 올림
- fork() : 복제 생성 시스템 콜
- exec() : 복제 생성 후 다른 프로그램으로 덮어씌우는 시스템 콜
- 부모 프로세스의 fork() return값 : 양수 (>0)
- 자식 프로세스의 fork() return값 : 0
- error 값 : -1 (음수)
따라서 서로 다른 일을 하게 할 수 있다.
부모 프로세스가 wait() 시스템 콜을 호출하면
커널은 자식 프로세스가 종료될 때까지 부모 프로세스를 sleep시킨다
- 마지막 statement 수행 후 exit()시스템 콜을 통해 프로세스 종료
- 프로그램에 명시적으로 적어주지 않아도 main 함수가 리턴되는 위치에 컴파일러가 넣어줌
- 자식이 부모에게 output data를 보냄
- 프로세스의 각종 자원들이 운영체제에게 반납됨
- abort() : 부모 프로세스가 자식의 수행을 종료시키는 시스템 콜
- 자식이 할당 자원의 한계치를 넘어서는 경우
- 자식에게 할당된 태스크가 더 이상 필요하지 않은 경우
- 키보드로 kill, break 등을 친 경우
- 부모가 종료(exit)하는 경우
thread
- 스레드는 사실상 하나의 프로세스이므로 프로세스간 협력으로 보기는 어려움
- 하지만 동일한 프로세스를 구성하는 스레드들 간에는 주소 공간을 공유하므로 협력이 가능