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を実行できます)。