2009-10-08 7 views

답변

2

응용 프로그램이 준수해야하는 표준 종료 코드 세트는 없습니다.

그러나 언급 한 성공을 위해 0과 같은 몇 가지 공통점이 있습니다. 운영 체제 및 사용하는 도구에 따라 유사한 앱의 종료 코드를보고이를 모방 할 수 있습니다.

+0

링크가 깨져서 Google 캐시에 없습니다. HP 포럼의 게시물은 특히 권위있는 참조 일 가능성이 거의 없습니다. –

14

나는 성공의 경우 0, 실패의 경우 0이 유일한 표준이라고 생각합니다. 표준보다 관습이 더 중요합니다.

4

종료 코드는 표준과는 거리가 멀며, 개발자가 응용 프로그램을 반환 할 때 발생하는 적절한 오류를 알기 위해 더 많이 사용됩니다. 성공에 대한 0, 실패에 대한 0이 아닌 표준은 일반적인 추세이며 모든 가능한 오류에 대해 0이 아닌 범위를 사용할 수 있도록하기 위해 사용됩니다.

응용 프로그램에서 오류를 적절하게 기록하는 경우 종료 코드는 추적 할 필요가 없을 것입니다.

5

표준 상태 코드는 EXIT_SUCCESSEXIT_FAILURE이며, stdlib.h에 정의되어 있습니다. 꽤 많은 사람들이 각각 0과 1을 사용합니다. 일부 소프트웨어는 서로 다른 유형의 오류에 대해 서로 다른 0이 아닌 코드를 사용합니다.

-2

사용할 항목을 구현하십시오. 다른 것은 불필요합니다.

7

유닉스 협약 중 일부를 채택 할 수도 있습니다.

another answer에서 사용자 다윗은

sysexits.h 표준 출력 코드의 목록이

을 제안했다. 최소한 1993 년으로 거슬러 올라가며 Postfix와 같은 몇몇 큰 프로젝트는 그것을 사용합니다. 그래서 나는 그것이 갈 길이라고 상상합니다. 오픈 BSD 사람 페이지에서

:

스타일에 따라 (9), 그것은 프로그램을 종료 할 때 (3) : 임의 정반대의 값으로 실패 조건을 나타내도록 출구를 호출하는 것이 좋습니다되지 않습니다. 대신 sysexits의 사전 정의 된 종료 코드를 사용해야하므로 프로세스 호출자는 소스 코드를 보지 않고 오류 클래스에 대한 대략적인 평가를 얻을 수 있습니다. 파일 /usr/include/sysexits.h 한 내부

#define EX_USAGE  64  /* command line usage error */ 
#define EX_DATAERR  65  /* data format error */ 
#define EX_NOINPUT  66  /* cannot open input */  
#define EX_NOUSER  67  /* addressee unknown */  
#define EX_NOHOST  68  /* host name unknown */ 
#define EX_UNAVAILABLE 69  /* service unavailable */ 
#define EX_SOFTWARE  70  /* internal software error */ 
#define EX_OSERR  71  /* system error (e.g., can't fork) */ 
#define EX_OSFILE  72  /* critical OS file missing */ 
#define EX_CANTCREAT 73  /* can't create (user) output file */ 
#define EX_IOERR  74  /* input/output error */ 
#define EX_TEMPFAIL  75  /* temp failure; user is invited to retry */ 
#define EX_PROTOCOL  76  /* remote error in protocol */ 
#define EX_NOPERM  77  /* permission denied */ 
#define EX_CONFIG  78  /* configuration error */ 

이러한 오류 코드의 자세한 설명을 볼 수 있습니다 : 그것은 데비안 시스템에 표시되는

은 목록입니다.

+0

이것은 내가 사용하는 것입니다. – RedShift

0

Windows 용으로 정의 된 표준 오류 코드가 있습니다.

오래전에 우리는 특정 '사용자 정의'오류에 대해 부정적인 오류를 사용 했었지만 좋은 사례라고 생각합니다.

System Error Codes (Windows)

+0

* 프로그램 종료 코드로 * 시스템 오류 코드 *를 사용할 필요가 없습니다. 다른 답변에서 언급했듯이, Windows 프로그램은 * 1 *을 catch-all 오류 코드로 사용하는 것이 일반적입니다. 모든 사람들이 * 시스템 오류 코드 *를 사용하고 있다면, 그것은 항상 "잘못된 기능"을 의미합니다 (그리고 일반적인 불특정 오류를 나타내는 방법이 전혀 없을 것입니다). –

+0

사실, 당신은 표준을 따를 필요가 없습니다. 질문은 표준에 관한 것이 었으며 이것이 제가 제공 한 것입니다. 기본 케이스가 0이면 성공을 나타내고 0이 아니면 실패를 나타냅니다. 발신자가 특정 오류를 처리 할 수없는 경우 오류가 무엇이 었는지 상관하지 않지만 발신자가 오류를 처리 할 것으로 예상되는 경우 의미있는 오류를주는 것이 좋습니다. 그러한 경우에 표준은 구조를 부여하는 데 도움이됩니다. – Pyro

+0

* "표준을 준수 할 필요가 없습니다"* - 이것은 비 연속입니다. 응용 프로그램 종료 코드로 시스템 오류 코드를 사용하면 "표준 준수"에 아무런 영향을 미치지 않습니다. * "호출자가 실패를 처리 할 것으로 기대하는 경우 의미있는 오류를주는 것이 좋습니다"* - 동의하지만, 수천 개가 있으므로 시스템 오류 코드를 사용하면 제대로 수행되지 않습니다 (따라서 호출자는 고려할 수 없습니다.) 모두) 응용 프로그램 별 오류를 의미있는 방식으로 설명하기에는 너무 일반적 일 수 있습니다. –

0

유일한 규칙 0 성공 및 비 - 제로 값 (일반적 1) 실패를 의미하는 의미이다. 이에 대한 공식 참고로, exit에 예를 들어, 마이크로 소프트의 C++ 문서를 참조하십시오

일반적으로, 호출자는 정상적인 종료를 나타 내기 위해 0으로 status 값을 설정하거나 다른 값에 오류를 나타냅니다.

또는 각종 상태 Envrionment.ExitEnvironment.ExitCode의 C#의 문서 :

사용 0 (영) 프로세스가 성공적으로 완료되었음을 나타냅니다.

기본값 프로세스가 성공적으로 완료되었음을 나타내는 0 (제로)이다.

오류를 표시하는 영이 아닌 번호를 사용합니다. 응용 프로그램에서 열거 형에서 고유 한 오류 코드를 정의하고 해당 시나리오를 기반으로 적절한 오류 코드를 반환 할 수 있습니다. 예를 들어, 필수 파일이 존재하지 않음을 나타내는 값 1을 리턴하고 파일이 잘못된 형식임을 나타 내기 위해 값 2를 리턴하십시오. Windows 운영 체제에서 사용되는 종료 코드 목록은 Windows 설명서의 System Error Codes을 참조하십시오.

some other answerers는 달리, 난 강력하게 응용 프로그램 종료 코드로 시스템 오류 코드를 사용에 대해 조언한다. 시스템 오류 코드에 대한 몇 가지주의 사항 :

  • 마이크로 소프트 응용 프로그램 종료 코드 어디서나로를 사용하여 조언을, 그리고 실제로 명시 적으로 이 문서에 "자신의 오류 코드를 정의"는하지 않는 것이 좋습니다 나는 위에서 인용한다.
  • Microsoft는 자신의 응용 프로그램이나 명령에서 종료 코드로 일관되게 사용하지 않습니다. MsiExec.exe과 같이과 같은 코드를 사용하는 응용 프로그램의 예가 있지만 dir, dotnet 또는 TAEF과 같이 많지는 않습니다.
  • 나를 사용하는 것은 나에게 명백하게 나쁜 생각처럼 보입니다. 수천시스템 종료 코드인데 대부분이 특정 응용 프로그램과 관련이 없습니다.이들을 사용하려고 시도하면 목록을 선택하여 시나리오에 적용되는 코드를 찾기 위해 시간을 낭비 할 것이고 최종 결과는 방금 적은 수를 정의한 경우보다 응용 프로그램을 호출하는 개발자에게 덜 유용 할 것입니다 귀하의 특정 응용 프로그램에 의미가있는 종료 코드를 입력하십시오.
관련 문제