개요

프로세스는 exit시스템 콜을 통해서 종료된다. exit시스템 콜이 호출되면 운영체제는 메모리나 파일과 같은 리소스들을 정리하고 프로세스를 종료시킨다.

Exit 시스템 콜을 호출하면,

  1. 우선 프로세스를 zombie status로 변경하고
  2. 자원을 회수한뒤
  3. disk에 buffered 된 아웃풋을 작성하고
  4. 프로세스의 contex를 제거한다.

exit 알고리즘

  1. 시그널을 모두 무시하고
  2. hangup시그널을 모든 멤버에게 전송한다
  3. 모든 멤버에 대한 프로세스 그룹을 0으로 설정한다.
  4. 열린파일을 모드 닫는다
  5. 현재 directory를 release한다
  6. root권한을 제출한다
  7. region을 free한다
  8. write해야할 것들을 작성한다
  9. process state를 좀비로 설정한다
  10. 자식프로세스의 모든 process ID를 1 (init)으로 설정한다 => 만약 자식중 한명이 zombie이면 death시그널을 init에게 보내 init이 자식을 죽이도록 한다.
  11. 혹은 자신의 부모에게 위와 같은 일을 하도록 위임한다.

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 */
}