プロセスにバックグラウンドでプロセスを実行するための入出力リダイレクトがある場合、コードで「&」演算子が使用されている場合に違いがあるかどうか知りたい
バックグラウンドでのプロセスの実行に関して、これらのコード行の違いは何ですか/違いがありますか?ある場合、どのように違いが発生するかを判断するにはどうすればよいですか?
setsid python script.py < /dev/zero &> log.txt &
setsid python script.py < /dev/zero & > log.txt &
setsid python script.py < /dev/zero > log.txt &
setsid python script.py & < /dev/zero > log.txt
ここには2つの用途があり&
ます。1つは、いわゆる制御オペレーターとしてです。すべてのコマンドは、次のような制御オペレータによって終了される&
、;
または<newline>
。両者の差があることです;
し、<newline>
フォアグラウンドでコマンドを実行すると&
、バックグラウンドでそれをしません。
setsid python script.py < /dev/zero & > log.txt &
setsid python script.py & < /dev/zero > log.txt
したがって、これらの2行は実際にはそれぞれ2つのコマンドを実行します。最初のコマンドは2つのコマンドと同等です。
setsid python script.py < /dev/zero &
> log.txt &
2番目は次と同等です。
setsid python script.py &
< /dev/zero > log.txt
あなたが疑問に思っているなら、はい、> log.txt
そして< /dev/zero > log.txt
どちらも合法的なコマンドです。コマンド名がない場合、リダイレクトを処理するだけです。それぞれがと呼ばれる空のファイルを作成しますlog.txt
。
setsid python script.py < /dev/zero &> log.txt &
のこのバージョンは、のバージョンと&>
は異なり& >
ます。&>
スペースなしは、stdoutとstderrの両方をリダイレクトするbashの特別なリダイレクト演算子です。
setsid python script.py < /dev/zero > log.txt &
この最終バージョンは、stdoutをにのみリダイレクトすることを除いて、以前のバージョンと同じlog.txt
です。stderrは引き続きターミナルに行きます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加