유닉스/리눅스에서
1) 모든 프로세스는 부모/자식의 관계를 갖는다.
* 일반적으로 특정 프로세스를 생성한(fork) 프로세스가 부모 프로세스이며,
부모의 유고시에도 1) 조건은 유지되어야 하며, 단, 부모를 1(init)로 한다.
2) 모든 프로세스는 첨부된 그림에 나타난 모든 스테이트를 가질 수 있다.
* 참고: 좀비스테이트도 프로세스가 가질 수 있는 한 state이며, 필연적으로 모든 프로세스가 거치는 상태임(종료될 수 있다면)
* 절차
1) A 라는 프로세스가 죽으면 자원을 반납하고 일단 좀비스테이트로 세팅됨(A→죽으면 좀비, zombie, defunct가 됨)
2) A 프로세스는 자신의 부모프로세스에게 자신의 exit 코드를 리턴함
3) 커널은 A 프로세스가 죽으면, 부모 프로세스에게 시그널(Sig child)을 발생시켜 통보하고, 그에 대해 처리(wait, signal 핸들러로 처리)를 대기함
4) 시그널을 받은 부모는 SIGCHLD에 대해 wait, signal handler로 처리
5) 커널은 좀비를 해제하고 완전하게 프로세스 관리 리스트에서 A 프로세스에 대한 엔트리를 제거
누구나 수정하실 수 있습니다. 위키 사용법 참고하세요. |