#include <stdlib.h> /* _exit(2) */ void _exit(int status); return: 없음 #include <unistd.h> /* exit(3) */ void exit(int status); return: 없음 #include <stdlib.h> /* exit(3) */ int atexit(void (*function)(void));
return: 성공 0, 실패 -1 |
◎ _exit()는 호출 프로세스를 "즉시" 종료합니다.
프로세스에 속한 열린 파일 디스크립터들이 모두 닫히고, 프로세스의 자식들은
프로세스 1번인 init프로세스 에게 승계하며 프로세스 부모에게는 SIGCHLD 시그널이 갑니다.
값 status을 부모 프로세스에게 프로세스의 종료 상태로 반환합니다.
(함수 _Exit()는 _exit()과 동등함)
◎ exit()는 일종의 라이브러리로 먼저 표준 입출력 라이브러리들에서 사용한 버퍼를 모두 방출(flush)
시키고 atexit()에서 등록시킨 exit 핸들러들을 모두 실행시킨후 _exit()를 호출하게 된다.
(main()에서의 return()은 exit()와 동등함)
C 표준에서는 두 상수 EXIT_SUCCESS와 EXIT_FAILURE를 명세하고 있는데,
이를 exit()에게 전달해서 각각 성공적인 종료과 성공적이지 못한 종료를 나타낼 수 있습니다.
◎ atexit() 함수는 exit(3)이나 프로그램 main()에서의 반환을 통한 정상적 프로세스 종료시 주어진
함수 function을 호출하도록 등록합니다. 그렇게 등록한 함수들은 등록 역순으로 호출하며 아무
인자도 전달하지 않습니다.
(같은 함수를 여러 번 등록하는 것도 가능. 각 등록마다 한 번씩 호출)
POSIX.1-2001에서는 구현체가 적어도 ATEXIT_MAX (32)개까지의 함수 등록을 허용해야 한다고 요구
하고 있습니다. 구현체가 지원하는 실제 제한치는 sysconf(3)를 이용해 얻을 수 있습니다.
fork(2)를 통해 자식 프로세스가 생기면 부모의 등록 함수들 사본을 물려받습니다.
exec(3)군 함수 중 하나의 호출이 성공하면 등록 항목 모두가 지워집니다.
※(exit 핸들러란, 프로그램 종료 시에 실행시킬 일종의 작업을 일컫는 것으로 atexit()에 의해 등록)
'Linux > Programming' 카테고리의 다른 글
한계들(Limits) – limits.h 와 conf 함수들 (0) | 2011.10.23 |
---|---|
파일 접근 시간과 수정 시간을 변경 - utime(2) (0) | 2011.10.23 |
파일 시간들(File Times) - 수정, 변경, 접근 시간 (0) | 2011.10.23 |
파일 접근 권한 비트 요약 (0) | 2011.10.23 |
파일 상태 정보 얻기 - stat, fstat, and lstat Functions (0) | 2011.10.23 |