2016-09-07 11 views
1

プロセスを終了するときにexitの引数として42を使用するのはなぜですか?私はいくつかのマクロ値(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で、ネットワークがダウンしている(またはタイムアウトが発生したため)ファイルをダウンロードできない場合は41となり、リモートファイルをダウンロードできない場合はコード37で終了することができます。ディレクトリが存在しません。

たとえば、プログラムを起動するスクリプト$?は、プログラムが完了した直後に環境変数$?の値をチェックできます。その値が37(リモートファイルが見つからない)の場合、エラーは永続的なため再試行してはなりません。終了コード62(ネットワークの問題)では、数秒待ってからもう一度やり直すことができます(エラー状態は一時的なもので、しばらくしてから消えることがあります)。終了コード41(ローカルディレクトリが見つからない)では、ローカルディレクトリを作成してからプログラムを再起動できます(前提条件は満たされていません)。

関連する問題