バックグラウンドでリモートでsshコマンドを実行するためにBashセクションをコピーしました。
ssh user@remote <<CMD
some process <&- >log 2>error &
CMD
<&-
効果は何ですか?
私の推測では何か関連があるようです。< /dev/null
次の理解は、次のことを防ぐために3つの主要なファイル記述子(stdin
、、、stdout
)を閉じる必要があることです。stderr
- バックグラウンドで実行されているジョブとスクリプトの終了中に競合が発生しますか?
- 端末が閉じると、端末からstdinを受け取るすべてのプロセスが閉じますか?
ベストアンサー1
<&-
いいえかなり.fd < /dev/null
0<&-
を閉じます。< /dev/null
デバイスがリダイレクトしている間は/dev/null
データを提供せず、読み取り時に常にEOFを提供します。主な違いは、read(2)
閉じたFD(この<&-
場合)の呼び出しはEBADFエラーを引き起こし、空のリダイレクトFDの呼び出しは読み取ったバイト(ファイルの終わり条件)を返さないことです。プログラムが標準入力からデータを読み取らない場合、違いは重要ではありません。
バックグラウンドで何かを実行するには、FDをオフにすることをお勧めします。なぜなら、バックグラウンドプロセスがTTYから何でも読み取ろうとすると中断されるからです。ただし、この例では必要なすべてを処理するわけではありませんが、理想的にはバックグラウンドプロセスを完全に分離するためにどこかにnohup
OR呼び出しがあるはずです。setsid