catコマンドのSTDOUTを追跡する方法

catコマンドのSTDOUTを追跡する方法

catどの入力を待つプロセスを開始するとしましょう。例えば、

$ cat > out.log

他の端末では、PIDを識別し、次のようにファイル記述子0(0 = STDIN)にデータを入力できます。

$  echo "hello" > /proc/2357/fd/0

その後、最初の端末が反応します。

$ cat > out.log
hello

いくつかの質問:1)プログラムの性質上、「hello」文字列はファイルにリダイレクトされるのではなく、実際の端末に表示されますかcat(tty /フロントエンドにのみ焦点を当てます)?

2)同じプロセスのstdoutを追跡することはできません。

tail -f /proc/2357/fd/1
...

何も現れません。ここで何が起こっているのか推測できますか?

答え1

/proc/2357/fd/0 は、端末自体である cat プロセスのファイル記述子 0 です。 /proc/2357/fd/1 は cat プロセスのファイル記述子 1 で、out.log ファイルにリンクされます。

今/proc/2357/fd/0に何かをechoすると、記述子が参照するファイルなので、端末に移動します。

/proc/2357/fd/1に何かをechoするとout.logに移動しますが、catを通して移動しません!

このようにして、プロセスに何かを再エコーすることはできません。

答え2

デフォルトでは、unixコマンドのT接合であるtee(1)コマンドを調べることをお勧めします。このコマンドはstdinをstdoutとファイルにリダイレクトします(その後、tail -Fを実行できます)。

関連情報