複数の独立プロセスの出力を他の端末に結合

複数の独立プロセスの出力を他の端末に結合

2つのプロセスに影響を与えずに3番目の場所で2つ以上の独立したプロセスの出力を取得するにはどうすればよいですか?

AとBという2つのプロセスがあり、それぞれが独自のプロセスで実行され、screen継続的にコンテンツを出力します。

Aを実行しscreenて追加して出力を表示できます。

12:00 Foo.
12:02 Foo.
12:04 Foo.

Bと同じ:

12:01 Bar.
12:03 Bar.
12:05 Bar.

複数の画面を組み合わせて並べて表示することもできます。

しかし、私はメッセージの「ストリーム」に結合されたこれら2つのプロセスの出力を見る方法を探しています。

12:00 Foo.
12:01 Bar.
12:02 Foo.
12:03 Bar.
12:04 Foo.
12:05 Bar.

CTRL + C誤って同様のコンテンツをプロセスの1つに送信する方法もありません。 (私はまだプロセスに再接続し、時々プロセスとやり取りできるようにしたいです。これが私が使用していることですscreen。)

それで、両方のプロセスを同時に実行して出力を直接見たくないと思います。

straceこれを使用して、次の操作を実行できます。

strace -PIDofA -e write &
strace -PIDofB -e write &

しかし、出力はあまりきれいではありません。

write(1, "12:00 Foo.", 10) = 10
write(5, "Foo in file.", 12) = 12
write(1, "12:01 Bar.", 10) = 10
write(5, "Bar in file.", 12) = 12
...

straceそして、結合された出力を得るためにこの方法で複数を実行することは良い解決策のようには感じません。

おそらく、両方のプロセスがファイルに書き込んで、次のようにすることができます。

tail -f output.txt

しかし、ファイルがより多くの出力ラインでいっぱいになるので、これが問題を引き起こすかどうかはわかりません。

両方のプロセスが同時に同じファイルに書き込もうとすると、どうなるのかわかりません。

では、どのツールを使用する必要があり、AとBの出力を一緒に表示するようにプロセスを再設計できますか?

(私はDebianで実行しており、違いがある場合はsshを介してアクセスしています。)

ベストアンサー1

最も簡単な方法は、画面に組み込まれたロギング機能を使用するようです。画面コマンドキー[control-A]、H出力画面はscreenlog.«window»(例screenlog.0:)に記録されます。両方の画面が同じディレクトリにあり、同じウィンドウ番号を持つ場合、最終的には同じログファイルに書き込まれ、これは必要に応じて機能するようです。異なるディレクトリ/別のウィンドウ番号にある場合は、たとえばを使用して2つのファイルをマージできますtail -qf dir1/screenlog.0 dir2/screenlog.0

画面は少し出力をバッファリングするので、ミックスは完璧ではないかもしれません。そのうちの1つから数行を取得し、他のものから数行を取得するように続けます。

logfileおよびオプションを使用してファイル名とバッファ時間を設定できますlogfile flush。フラッシュ時間を0に設定すると機能するようです(画面のコマンドキー、:を押してからを入力しlogfile flush 0てEnterを押します)。

おすすめ記事