_exit과 exit 의 차이점에 대해
글쓴이: topbanana / 작성시간: 목, 2003/01/02 - 2:12오후
안녕하세요.
unix c programming공부를 하고 있는데요,
_exit 과 exit 함수의 차이점이 이해가 안가
아시는 분들의 조언을 구하려고 합니다.
전자는 호출한 프로세스를 즉시 종료시키는데,
호출돤 프로세스의 모든 오픈 파일 디스크립터가 닫히고,
종료 상태값을 부모에게 반환한다
반면에 후자는 ANSI C atexit 함수로 등록한 함수를 호출하며 ,
표준 입출력 버퍼를 비운다.
위와 같이 두 함수의 차이점을 이해했는데요,
그렇다면 main함수내에서 exit을 호출해 줬을때는,
이 함수가 exit handler를 호출하여 프로세스를 종료시키고,
exit함수를 쓰지 않고 return 을 명시하거나 또는 return조차
적지 않았을때 자발적으로 _exit함수에 의해 프로세스가
종료되는건가요?
Forums:
strace 로 확인한 결과 return 값을 명시하지 않거나 retur
strace 로 확인한 결과 return 값을 명시하지 않거나 return 0; 등으로
프로그램을 끝낼때 _exit() 가 호출됩니다.
exit()의 경우 C라이브러리 함수인데, 말씀하신 버퍼 플러쉬 따위의
작업등을 하고 _exit()를 호출하겠지요. 좀더 안전하고 편리한 방법을 제공하기
위함입니다.
음...
_exit(); 호출하면 곧바로 커널로 복귀하지만, exit(); 함수를
사용하면 버퍼를 비운다던지, 기타 루틴을 수행후에 커널로
복귀합니다.
_exit();함수는 보통 fork();와 vfork();의 차이점 설명에서
많이 나오죠.
H/W가 컴퓨터의 심장이라면 S/W는 컴퓨터의 영혼이다!
_exit
_exit(2)는 exit(2)와 비슷하지만, 여러 가지 일을 하지 않습니다. 예를 들면
- atexit(3)으로 등록된 함수 호출 안함.
- 등록된 signal handler 호출 안함
또한 아래 사항은 implementation defined입니다
- 표준 I/O buffer 플러쉬 여부
- tmpfile(3)로 만든 임시 파일 삭제 여부
보통은 _exit(2)를 직접 부르는 일은 드뭅니다. 다만 멀티 쓰레드를 쓰는 경우,
한 쓰레드가 exit(3)를 호출하면 원치 않게 file을 닫아버린다거나 하는 일이
발생하게 되므로, 먼저 끝나는 child thread에서 가끔 쓰기도 하는 것으로
알고 있습니다.
"Programming POSIX Threads"란 책에서 _exit(2)에 대한 설명이 나와
있는 것으로 아는데.. 기억이 잘 나지 않는군요. -)
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://cinsk.github.io/cfaqs/
댓글 달기