_exit과 exit 의 차이점에 대해

topbanana의 이미지

안녕하세요.
unix c programming공부를 하고 있는데요,

_exit 과 exit 함수의 차이점이 이해가 안가
아시는 분들의 조언을 구하려고 합니다.
전자는 호출한 프로세스를 즉시 종료시키는데,
호출돤 프로세스의 모든 오픈 파일 디스크립터가 닫히고,
종료 상태값을 부모에게 반환한다
반면에 후자는 ANSI C atexit 함수로 등록한 함수를 호출하며 ,
표준 입출력 버퍼를 비운다.
위와 같이 두 함수의 차이점을 이해했는데요,
그렇다면 main함수내에서 exit을 호출해 줬을때는,
이 함수가 exit handler를 호출하여 프로세스를 종료시키고,
exit함수를 쓰지 않고 return 을 명시하거나 또는 return조차
적지 않았을때 자발적으로 _exit함수에 의해 프로세스가
종료되는건가요?

zsani2의 이미지

strace 로 확인한 결과 return 값을 명시하지 않거나 return 0; 등으로
프로그램을 끝낼때 _exit() 가 호출됩니다.

exit()의 경우 C라이브러리 함수인데, 말씀하신 버퍼 플러쉬 따위의
작업등을 하고 _exit()를 호출하겠지요. 좀더 안전하고 편리한 방법을 제공하기
위함입니다.

불량청년의 이미지

_exit(); 호출하면 곧바로 커널로 복귀하지만, exit(); 함수를

사용하면 버퍼를 비운다던지, 기타 루틴을 수행후에 커널로

복귀합니다.

_exit();함수는 보통 fork();와 vfork();의 차이점 설명에서

많이 나오죠.

H/W가 컴퓨터의 심장이라면 S/W는 컴퓨터의 영혼이다!

cinsk의 이미지

_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)에 대한 설명이 나와
있는 것으로 아는데.. 기억이 잘 나지 않는군요. -)

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.