如何跟踪 cat 命令的 STDOUT

如何跟踪 cat 命令的 STDOUT

假设我启动一个cat进程来等待一些输入。例如,

$ cat > out.log

在另一个终端中,我可以识别其 PID 并将数据输入其文件描述符 0(零 = STDIN),如下所示:

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

然后第一个终端做出反应:

$ cat > out.log
hello

有几个问题:1)“hello”字符串显示在实际终端中,而不是重定向到文件,这是由于程序的性质cat(它只关注 tty/前台)吗?

2)我无法跟踪同一进程的标准输出:

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 回显某些内容,它将转到终端,因为那是描述符引用的文件。

如果您将某些内容回显到/proc/2357/fd/1,它将进入out.log,但不会通过cat!

您无法以这种方式向流程回显某些内容。

答案2

您可能想看一下 tee(1) 命令,它基本上是 unix 命令的 T 形连接:它将其 stdin 重定向到 stdout 和文件(然后您可以 tail -F)

相关内容