C에서 exit (0)과 exit (1)의 차이점은 무엇입니까?


96

누구든지 말해 줄 수 있습니까? C 언어에서 exit(0)와 의 차이점은 무엇입니까 exit(1)?

답변:


117

C 언어에서 exit(0)와 의 차이점은 무엇입니까 exit(1)?

exit(0)성공적인 프로그램 종료를 나타내며 완전히 이식 가능하며
exit(1)(일반적으로) 성공적이지 않은 종료를 나타냅니다. 그러나 사용은 휴대용이 아닙니다.

C 표준은 C 프로그램에서 종료 상태를 정의 EXIT_SUCCESS하고 EXIT_FAILURE반환합니다.

0EXIT_SUCCESS성공적인 종료를 나타 내기 위해 표준에 의해 지정된 값이며, 단, EXIT_FAILUREunsucessful 종료를 반환하기위한 표준 값입니다. 1그래도 많은 구현에서 동일하게 사용됩니다.


참고:

C99 표준 : 7.20.4.3 exit5 항 기능

마지막으로 제어가 호스트 환경으로 반환됩니다. status 값이 0 또는 EXIT_SUCCESS이면 성공적 종료 상태의 구현 정의 형식이 반환됩니다. status 값이 EXIT_FAILURE이면 실패한 종료 상태의 구현 정의 형식이 반환됩니다. 그렇지 않으면 반환 된 상태는 구현에 따라 정의됩니다.


1
비 이동성에 대해 설명해 주시겠습니까? 특히 0이 아닌 종료 코드는 다른 실패 모드를 나타냅니다. 응용 프로그램에서이 정보를 사용하여 추가 정보를 제공하는 것이 일반적입니다. 따라서 단일 상수 ( EXIT_FAILURE)로는 충분하지 않습니다.
Konrad Rudolph

@KonradRudolph : 관련 인용문을 추가했습니다. 도움이 되었기를 바랍니다.
Alok Save

1
@Als : POSIX는 표준입니다. C 표준은 "구현 정의"하지만 그 사실에 구현하는 경우, "이식 할 수 없습니다"라는 동등하지 말할 수 협약에 동의합니다.
Cat Plus Plus

1
@PeterM :이 규칙을 사용하지 않는 플랫폼을 찾아주세요. 이식성이 exit가장 우려 되는 부분 인 전문화 / 내장 / 자립 / 어떤 환경 일 가능성이 높습니다 (도대체, 거기에서 사용할 있는 C 라이브러리 도 없을 수 있습니다 . 이식 가능 하지 않습니다 !!! 111).
Cat Plus Plus

3
@CatPlusPlus : OpenVMS에서 exit홀수 값으로 호출 하면 성공을 나타냅니다. exit(0)C 준수를 위해 특별한 경우로 취급됩니다. 예, POSIX는 표준이지만 모든 시스템이 표준을 따르는 것은 아닙니다. POSIX를 가정하는 코드를 작성하려면 자유롭게 할 수 있지만 코드의 이식성을 제한합니다.
Keith Thompson

12

exit C 언어에서는 종료 상태를 나타내는 정수를 사용합니다.

종료 성공

일반적으로 종료 상태 0은 성공 또는 프로그램의 성공적인 실행으로 인한 의도적 인 종료로 간주됩니다.

종료 실패

종료 상태 1은 실패로 간주되며 가장 일반적으로 프로그램이 어떤 이유로 종료되어야했으며 정상적인 프로그램 흐름에서 모든 것을 성공적으로 완료 할 수 없었 음을 의미합니다.

다음 은 종료 상태에 대해 설명 하는 GNU 리소스 입니다.


@Als가 언급했듯이 0과 1 대신 두 개의 상수를 사용해야합니다.

EXIT_SUCCESS 표준에 의해 0으로 정의됩니다.

EXIT_FAILURE 표준에 의해 하나로 제한되지는 않지만 많은 시스템이이를 하나로 구현합니다.


9

exit(0)프로그램이 오류없이 종료되었음을 나타냅니다. exit(1)오류가 있음을 나타냅니다.

1다른 종류의 오류를 구별하는 것 외에 다른 값을 사용할 수 있습니다 .


3

차이점은 환경에 반환되는 값 0이 전자의 경우와 1후자의 경우입니다.

$ ./prog_with_exit_0
$ echo $?
0
$

$ ./prog_with_exit_1
$ echo $?
1
$

또한 매크로 값 EXIT_SUCCESS과 함수에 EXIT_FAILURE대한 인수로 사용되는 exit것은 구현에 정의되어 있지만 일반적으로 각각 00이 아닌 숫자로 설정됩니다. (POSIX는 EXIT_SUCCESS0이어야합니다). 그래서 보통 exit(0)성공과 exit(1)실패를 의미합니다 .

exitfunction에서 인수가 있는 함수 호출 은 동일한 인수가 main있는 명령문 return과 동일합니다.


2

exit는 호출되는 실행중인 프로세스를 완료하는 데 사용되는 시스템 호출입니다. 종료 할 매개 변수는 상위 프로세스에 하위 프로세스의 상태를 알리는 데 사용됩니다. 따라서 exit (0)은 프로세스의 성공적인 실행을 나타 내기 위해 사용 (그리고 자주 사용됨) 할 수 있고 exit (1)을 사용하여 오류를 표시 할 수 있습니다. 참조 링크


1

exit(0)처럼 행동 return 0main()기능 exit(1)처럼 행동 return 1. 이 표준은, 즉 main기능 return 0이 프로그램 아닌 값 수단은 오류의 일종으로 종료 동안 프로그램이 성공적으로 끝난 경우.


1

exit (0)은 exit (EXIT_SUCCESS)와 같습니다.

exit (1)은 exit (EXIT_FAILURE)와 같습니다.

실패시 일반적으로 $?를 사용하여 쉘에서 찾을 수있는 프로세스를 종료하기 위해 양의 값이 리턴됩니다.

신호에 의해 종료 된 128보다 큰 값. 따라서 시그널로 종료 된 쉘 명령이 있으면 리턴 상태는 (128+ 신호 번호) 여야합니다.

예를 들면 :

쉘 명령이 SIGINT에 의해 종료되면 $? 130 (128 + 2) (여기서 2는 SIGINT의 신호 번호입니다. kill -l을 사용하여 확인하십시오)


0

실행 파일이 종료 (종료)되면 실행 한 셸에 값을 반환합니다. exit(0)일반적으로 모든 것이 잘되고 exit(1)있음을 나타내며 무언가 잘못되었음을 나타냅니다.



0

exit(0) 프로그램 (프로세스)이 정상적으로 종료됨을 의미합니다.

exit(1) 프로그램 (프로세스)이 정상적으로 종료되지 않음을 의미합니다.

이것을 관찰하려면 Unix에서 신호 처리 및 프로세스 관리를 알아야합니다.

sigaction, watipid()..for () ... such .... API ........... 에 대해 알고 있습니다 .


0

exit function. C 프로그래밍 언어에서 종료 함수는 종료시 등록 된 모든 함수를 호출하고 프로그램을 종료합니다.

exit(1)프로그램 (프로세스)이 성공적으로 종료되지 않음을 의미합니다. 파일 버퍼가 플러시되고 스트림이 닫히고 임시 파일이 삭제됩니다.

exit(0) 프로그램 (프로세스)이 성공적으로 종료되었음을 의미합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.