出力をログファイルにリダイレクトしながら、プロセスをバックグラウンドにすることはできますか?

出力をログファイルにリダイレクトしながら、プロセスをバックグラウンドにすることはできますか?

出力をログファイルとバックグラウンドプロセスに同時にリダイレクトできますか?

つまり、このようなことができますか?

nohup java -jar myProgram.jar 2>&1 > output.log &

それともこれは法的命令ではありませんか?または、次のように手動で背景に移動する必要がありますか?

java -jar myProgram.jar 2>$1 > output.log
jobs
[CTRL-Z]
bg 1

ベストアンサー1

最初のコマンドの問題の1つは、stderrをstdoutのある場所にリダイレクトしてから(説明で提案されているように$を&に変更した場合)、stdoutをいくつかのログファイルにリダイレクトしますが、リダイレクトされたstderrをインポートしないことです。別の順序でこれを行う必要があります。まず、stdoutを目的の場所に送信してから、stdoutのあるアドレスにstderrを送信します。

some_cmd > some_file 2>&1 &

その後、& を追加して背景に送信できます。コマンドを使用してジョブにアクセスできますjobsjobs実行中のジョブが表示され、番号が付けられます。その後、%の後に同様の数字を使用して仕事について話すことができますkill %1

また、最後に&がない場合は、一時停止コマンドを使用してCtrlz背景bgに配置し、fg前景に戻すこともできます。コマンドと組み合わせて、jobsこの機能は非常に強力です。

コマンドが作成される順序について上記のセクションを明確にしてください。 stderr はアドレス 1002、stdout はアドレス 1001、ファイルは 1008 と仮定します。コマンドは左から右に読み取られるので、コマンドで最初に見るのは、2>&1stderrをアドレス1001に移動することです。次に、> filestdoutを1008に移動しますが、stderrを1001に保つことを確認します。 1001を指すすべてを取り出し、1008に移動するのではなく、stdoutを参照してファイルに移動します。
代わりに、stdoutを1008に移動し、stderrをstdoutが指すポイント1008に移動します。これにより、両方とも単一のファイルを指すことができます。

おすすめ記事