
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を押します)。
答え2
各コマンドの出力をtee file
ファイルにパイプし、tail -fを使用して作業できます。プロセス間に同期がないため、出力はインターリーブされます(おそらく見苦しい方法で)。ディスクがいっぱいになるのが心配な場合は、代わりに名前付きパイプに出力できます。
[first screen]
$ mkfifo /tmp/foo
$ tail -f /tmp/foo
[second screen]
$ command1 | tee /tmp/foo
[third screen]
$ command2 | tee /tmp/foo