Linux
如何跟踪 cat 命令的 STDOUT
假設我啟動了一個
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)