2016-09-07 11 views
1

프로세스를 종료하는 동안 42를 exit 인수로 사용하는 이유는 무엇입니까? 나는 그것이 어떤 매크로 값 (1은 EXIT_FAILURE 매크로의 값임)인지 또는 좀 더 깊은 의미인지 궁금하다.왜 출구 (42)입니까?

if(pid == 0) { 
    printf("something\n"); 
    exit(42); 
} 

그것은 가지 분명히 내가 출구 (1) 또는 출구 (42)를 사용하는 경우는 문제가되지 않는다는 것입니다, 그런데 왜 단지 42?

+12

42 [생명, 우주 및 모든 것에 대한 해답!] (https://www.google.it/?client=ubuntu#channel=fs&q=the+answer+to+life%2C+the+universe + and + everything & gfe_rd = cr) – Bakuriu

+1

127을 찍었습니까? – EOF

+5

42는 분명히 명명 된 값의 * 반대 *입니다. 코드의 작성자 만이 그 이유를 알고있는 것은 마법의 가치입니다. 이식성이 없지만 유일한 휴대용 종료 값은 0,'EXIT_SUCCESS' 및'EXIT_FAILURE'입니다. –

답변

6

0을 제외한 숫자는 모두 완료되었을 것입니다. 그러나 42는 Answer to the Ultimate Question of Life, the Universe, and Everything입니다. IT 사람들 사이

매우 인기 ...

왜 더글러스 아담스 (42)를 선택 했습니까?

나는 책상에 앉아서 정원을 응시하고 '42 할 것 '이라고 생각했습니다. 나는 을 입력했습니다. 이야기 끝

+1

오, 이봐, 나는 그것을 알고 있었다. 그러나 그것은 사실이 되기에는 너무 재미 있었다. xD – zeroDivider

1

이러한 마법 값은 부모 프로세스에 대한 정확한 종료 이유를 나타 내기 위해 사용될 수 있습니다. 최소한의 IPC 같은 것을 위협 할 수 있습니다. 물론 두 공정 모두 실제 가치와 의미에 동의해야하며, 특별한 예비 종료 코드는 사용하지 않아야합니다.

+1

가능하면 [sysexits.h] (https://www.freebsd.org/cgi/man.cgi?query=sysexits&apropos=) 0 & sektion = 0 & manpath = FreeBSD + 4.3-RELEASE & format = html)이 선호됩니다. 그것은 꽤 표준입니다. –

1

이 가지 분명히 내가 출구 (1) 또는 출구 (42)를 사용하는 경우 그것은 실제로 많은 중요한

문제가되지 않는다는 것입니다.

종료 코드는 종료 프로세스를 시작하는 프로세스에서 사용할 수 있습니다. 종료 프로세스는 완료 프로세스와 실패 원인을 알기 위해 사용됩니다.

프로그램을 시작한 프로세스는 프로그램이 완료된 직후 환경 변수 $?의 값을 검사하여 성공했는지 또는 성공하지 못한 이유를 알 수 있습니다.

프로그램이 원격 사이트에서 파일을 다운로드하여 로컬 디렉토리에 저장한다고 가정 해 보겠습니다. 기존의 로컬 디렉토리를 사용할 것으로 예상되며, 존재하지 않으면 로컬 디렉토리를 생성하려고 시도하지 않습니다. 예를 들어 원격 사이트가 404 Not Found을 반환하고 코드가 62 인 경우 원격 파일을 다운로드 할 수없는 경우 코드 37을 사용하여 종료 할 수 있습니다. 네트워크가 다운 되었기 때문에 파일을 다운로드 할 수 없거나 시간 초과가 발생하여 41 디렉토리가 존재하지 않습니다.

예를 들어, 프로그램을 호출하는 bash 스크립트는 프로그램 완료 후 즉시 환경 변수 $?의 값을 확인할 수 있습니다. 값이 37 (원격 파일을 찾을 수없는 경우) 인 경우 오류가 영구적이어서 다시 시도하지 않아야합니다. 종료 코드 62 (네트워크 문제)에서 몇 초 기다렸다가 다시 시도 할 수 있습니다 (오류 상태는 일시적이며 잠시 후 사라질 수 있음). 종료 코드 41 (로컬 디렉토리를 찾을 수 없음)에서 로컬 디렉토리를 만든 다음 프로그램을 다시 시작할 수 있습니다 (전제 조건이 충족되지 않았습니다).