他のプロセスが完了したらtailを終了する

他のプロセスが完了したらtailを終了する

私は持っている

parallel --j 2 -- "sh script1" "sh script2"

どこにログインしscript1、ファイルとscript2log1log2

これを次のように変更します:

parallel --j 3 -- "sh script1" "sh script2" "tail -f log1 log2"

tail を使用する理由は、2 つのスクリプトを同時に画面に出力できるようにするためです。出力が乱雑になり、カーソルが失われるなどの問題が発生し、実行のたびにターミナルを再起動する必要があります。

しかし問題は、これが永久に続くことであり、script1 と script2 が完了したら tail を終了させたいのです。どうすればそれができるでしょうか?

答え1

これはまたあなたが望むものではないかもしれませんが、どうでしょうか:

parallel --j 2 -- "sh script1" "sh script2"; tail log1 log2

tail両方のジョブが完了すると、両方のログ ファイルが待機状態から解除されます。

答え2

実際、私がやるべきことを見つけました:

parallel --j 2 -- "sh script1" "sh script2" &
PID=$!
tail --pid=$PID -f log1 log2

答え3

私は使うだろうマルチテールまたはtmux

答え4

parallel --j 2 -- "sh script1" "sh script2" & tail -f log1 log2

これはparallel ...バックグラウンドで実行され、その後実行されますtail ...

Ctrl-C尾を押してもparallelジョブには影響しません。

parallelをフォアグラウンドにする必要がある場合は、 を終了してtailと入力します。 を再びバックグラウンドに送るには(もう一度fg実行できるようにするため)、 を押してと入力します。 または、 で終了することもできます。tailCtrl-Zbgkill %%

詳細については、シェルのドキュメントを参照してください。たとえば、bash を使用している場合は、man bash(all-caps) を実行して検索しますJOB CONTROL

関連情報