/* 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. */
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 를 의미합니다. --;
보통 문제가 없으면
보통 문제가 없으면 0을
문제가 있으면 1을 리턴하도록 작성합니다.
참고로 /usr/include/stdlib.h 를 보면
라는 정의가 있습니다.
parent 프로세스에서
parent 프로세스에서 그 값을 받아올 수 있습니다.
대게 쉘이 부모 프로세스이기 때문에 쉘이 그 값을 받아옵니다.
값 범위는 8비트네요
부모에서 호출하는 wait()나 waitpid()의 리턴값에 포함되어 오는데 WEXITSTATUS() 매크로를 통해서 알 수 있습니다.
그럼
그럼 OS로 반환되는 게 아니라 부모 프로세스로 반환되는 거였군요...?
부모
정확히는 OS로 반환되는 거겠죠.
부모가 OS한테 물어보는 거고요.
네 정확히는 시스템
네 정확히는 시스템 콜이라 운영체제가 값을 가지고 있다가 부모프로세스에 반환 하는게 맞습니다.
논리적으로 보자면 자식이 부모에게 알려주는 것 입니다.
exit 나 main function의
exit 나 main function의 return 값은 shell 의 exit status와 관련이 있습니다. 이를 인식 하시고 exit나 return 해 주시는 것이 좋습니다.
간혹 exit (-1) 하시는 분들 계신데, exit (-1)은 255입니다. 즉 unknwon status 를 의미합니다. --;
댓글 달기