Skip to content

C:exit

Causes normal program termination to occur.

abort vs exit vs _exit vs 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:
The exit() function causes normal process termination and the value of status & 0377 is returned to the parent.
abort()
어떠한 종료작업없이 프로그램을 즉시 종료한다.
From the abort() manual page:
The abort() first unblocks the SIGABRT signal, and then raises that signal for the calling process. This results in the abnormal termination of the process unless the SIGABRT signal is caught and the signal handler does not return.
_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

Favorite site