Linux

如何跟踪 cat 命令的 STDOUT

  • July 19, 2018

假設我啟動了一個cat程序來等待一些輸入。例如,

$ cat > out.log

在另一個終端中,我可以辨識它的 PID 並將數據輸入它的文件描述符 0(零 = STDIN),如下所示:

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

然後第一個終端做出反應:

$ cat > out.log
hello

幾個問題:1)“hello”字元串顯示在實際終端中,而不是被重定向到文件,這是由於cat程序的性質(它只關注 tty/前台)嗎?

2)我不能跟踪同一程序的 STDOUT:

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

什麼都沒有出現。關於這裡發生了什麼的任何猜測?

/proc/2357/fd/0是cat程序的文件描述符0,也就是終端本身。/proc/2357/fd/1 是您連接到文件 out.log 的 cat 程序的文件描述符 1。

現在,如果您向 /proc/2357/fd/0 回顯某些內容,它將轉到終端,因為這是描述符所指的文件。

如果您向 /proc/2357/fd/1 回顯某些內容,它將進入 out.log,但不會通過 cat!

您不能以這種方式在流程中回顯某些內容。

您可能想看一下 tee(1) 命令,它基本上是 unix 命令的 T-junction:它將其標準輸入重定向到標準輸出和文件(然後您可以使用 tail -F)

引用自:https://unix.stackexchange.com/questions/457135