C:exit
Causes normal program termination to occur.
abort vs exit vs _exit vs atexit
- exit() 와 abort()
- Stackoverflow - What is the difference between exit() and abort()?
- 프로세스의 종료 - exit, _exit, atexit
-
exit()
- exit 함수는 모든 static 객체를 파괴하고, 모든 버퍼를 방출(flush) 하며, 모든 I/O 채널을 닫고, 프로그램을 종료하면서
atexit()
으로 등록된 함수를 호출한다. 만약 함수가 atexit()에 전달되면 예외가 발생하고 terminate() 가 호출된다. -
main()
에서의return()
은exit()
와 동등함. - C 표준에서는 두 상수 EXIT_SUCCESS와 EXIT_FAILURE를 명세하고 있는데, 이를 exit()에게 전달해서 각각 성공적인 종료과 성공적이지 못한 종료를 나타낼 수 있습니다.
-
C_exit_process.png - From the exit() manual page:
-
abort()
- 어떠한 종료작업없이 프로그램을 즉시 종료한다.
- From the abort() manual page:
-
_exit()
- 는 호출 프로세스를 "즉시" 종료합니다. 프로세스에 속한 열린 파일 디스크립터들이 모두 닫히고, 프로세스의 자식들은 프로세스 1번인 init프로세스 에게 승계하며 프로세스 부모에게는 SIGCHLD 시그널이 갑니다. 값 status을 부모 프로세스에게 프로세스의 종료 상태로 반환합니다.
- (
_Exit()
는_exit()
과 동등함)
-
atexit()
-
exit(3)
이나 프로그램main()
에서의 반환을 통한 정상적 프로세스 종료시 주어진 함수 function을 호출하도록 등록합니다. 그렇게 등록한 함수들은 등록 역순으로 호출하며 아무인자도 전달하지 않습니다. (같은 함수를 여러 번 등록하는 것도 가능. 각 등록마다 한 번씩 호출) POSIX.1-2001에서는 구현체가 적어도 ATEXIT_MAX (32)개까지의 함수 등록을 허용해야 한다고 요구 하고 있습니다. 구현체가 지원하는 실제 제한치는 sysconf(3)를 이용해 얻을 수 있습니다.- fork(2)를 통해 자식 프로세스가 생기면 부모의 등록 함수들 사본을 물려받습니다.
- exec(3)군 함수 중 하나의 호출이 성공하면 등록 항목 모두가 지워집니다.
See also
- C/C++
- C:abort
- C:atexit
- C:quick_exit
- C:at_quick_exit
- std::set_terminate
- C:_Exit