UNIXでは、Javaファイルを作成して、標準エラーに「EXIT 1」を出力し、ステータス1で終了します。
これが私のアプローチです。
System.err.println("EXIT 1");
System.exit(1);
これは私がやるべきことですか?
もしそうなら、どのようにUnixシェルでそれを使用することになっていますか? bashでコンパイルして実行すると、「EXIT 1」が出力されるだけです(したがって、System.out.printlnと同じことをします。なぜ「err」を使用する必要があるのですか?)。ここでの「標準エラー」とは何ですか?
実行中のすべてのプログラムには、次の3つのストリームがあります。
System.in
_ として公開System.out
_ として公開System.err
_ として公開あなたのプログラムは正しいです-stderrに出力します。しかし、通常の状況では、stderrストリームはstdoutストリームと同じようにコンソールに送られるため、視覚的に区別できません。
ただし、エラーメッセージにstdoutではなくstderrを使用する必要がある理由は、redirectionです。つまり、コンソールではなくファイルにstderrを送信します。一方、2つのストリームは独立しているため、stdoutは影響を受けません。
たとえば、bash、cmd、PowerShellなどでこれを実行できます。
_$ Java Program 2> errors.txt
_
現在、System.err.println()
を含むすべての出力は_errors.txt
_になりますが、System.out.println()
は引き続き画面に表示されます。これはデバッグに役立ちます。
ほとんどすべてのプロセスに関連付けられた3つのデータストリームがあります。
error_log
ファイルはstderr
経由で、通常のログファイルはeです。 g。 access_log
。標準出力(stdout
)と標準エラー(stderr
)は、ほぼ常に、それぞれプロセスからの最初と2番目の出力ストリームです。これにより、/path/to/my/neat/program > logs/program.log 2> logs/program.err
および出力とエラーが適切にソートされています。