언제 exit(0);로 끝내고 언제 exit(1);로 끝내는 건가요?

kkb의 이미지

언제 exit(0);로 끝내고 언제 exit(1);로 끝내는 건가요?

소스 보다보면 어떨때는 exit(0);로 끝내고 어떨때는 exit(1);로 끝내던데
각각 어떨때 그렇게 끝내나요?

그리고 그러면 exit(2);나 exit(-1);도 있나요?

마지막으로 exit()의 매개변수나 main() 함수의 리턴값은 OS로 반환되는 것인가요? 실행시켰던 해당 셸로 반환되는 것인가요?

vacancy의 이미지


보통 문제가 없으면 0을
문제가 있으면 1을 리턴하도록 작성합니다.

참고로 /usr/include/stdlib.h 를 보면

/* We define these the same for all machines.
   Changes from this to the outside world should be done in `_exit'.  */
#define EXIT_FAILURE    1   /* Failing exit status.  */
#define EXIT_SUCCESS    0   /* Successful exit status.  */

라는 정의가 있습니다.

swirlpotato의 이미지

parent 프로세스에서 그 값을 받아올 수 있습니다.
대게 쉘이 부모 프로세스이기 때문에 쉘이 그 값을 받아옵니다.

값 범위는 8비트네요
부모에서 호출하는 wait()나 waitpid()의 리턴값에 포함되어 오는데 WEXITSTATUS() 매크로를 통해서 알 수 있습니다.

kkb의 이미지

그럼 OS로 반환되는 게 아니라 부모 프로세스로 반환되는 거였군요...?

drinkme의 이미지

정확히는 OS로 반환되는 거겠죠.
부모가 OS한테 물어보는 거고요.

swirlpotato의 이미지

네 정확히는 시스템 콜이라 운영체제가 값을 가지고 있다가 부모프로세스에 반환 하는게 맞습니다.
논리적으로 보자면 자식이 부모에게 알려주는 것 입니다.

김정균의 이미지

exit 나 main function의 return 값은 shell 의 exit status와 관련이 있습니다. 이를 인식 하시고 exit나 return 해 주시는 것이 좋습니다.

EXIT STATUS
       For the shell's purposes, a command which exits with a zero exit status
       has succeeded.  An exit status of zero indicates success.   A  non-zero
       exit  status  indicates  failure.  When a command terminates on a fatal
       signal N, bash uses the value of 128+N as the exit status.
 
       If a command is not found, the child  process  created  to  execute  it
       returns  a status of 127.  If a command is found but is not executable,
       the return status is 126.
 
       If a command fails because of an error during expansion or redirection,
       the exit status is greater than zero.
 
       Shell  builtin  commands return a status of 0 (true) if successful, and
       non-zero (false) if an error occurs while they execute.   All  builtins
       return an exit status of 2 to indicate incorrect usage.
 
       Bash  itself  returns  the  exit  status  of the last command executed,
       unless a syntax error occurs, in which case it exits  with  a  non-zero
       value.  See also the exit builtin command below.

간혹 exit (-1) 하시는 분들 계신데, exit (-1)은 255입니다. 즉 unknwon status 를 의미합니다. --;

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.