개요
프로세스는 exit시스템 콜을 통해서 종료된다. exit시스템 콜이 호출되면 운영체제는 메모리나 파일과 같은 리소스들을 정리하고 프로세스를 종료시킨다.
Exit 시스템 콜을 호출하면,
- 우선 프로세스를 zombie status로 변경하고
- 자원을 회수한뒤
- disk에 buffered 된 아웃풋을 작성하고
- 프로세스의 contex를 제거한다.
exit 알고리즘
- 시그널을 모두 무시하고
- hangup시그널을 모든 멤버에게 전송한다
- 모든 멤버에 대한 프로세스 그룹을 0으로 설정한다.
- 열린파일을 모드 닫는다
- 현재 directory를 release한다
- root권한을 제출한다
- region을 free한다
- write해야할 것들을 작성한다
- process state를 좀비로 설정한다
- 자식프로세스의 모든 process ID를 1 (init)으로 설정한다 => 만약 자식중 한명이 zombie이면 death시그널을 init에게 보내 init이 자식을 죽이도록 한다.
- 혹은 자신의 부모에게 위와 같은 일을 하도록 위임한다.
exit handler
#include stdlib.h
void atexit(void (*func)(void);
exit handler는 최대 32개까지 등록될수 있으며 시스템이 exit됨과 동시에 자동으로 호출된다. 등록한 함수가 여러 개일 때 등록한 역순으로 수행한다.
예시
#include <stdlib.h>
int main(void)
{
exit(EXIT_SUCCESS); /* or return EXIT_SUCCESS */
}