我指的是这问题以查看是否可以监视另一个正在运行的进程的标准输出。一个答案建议使用tail -f /proc/<PID>/fd/1
这样做。于是我打开了两个终端会话来尝试一下。在第一个终端中,我使用 回显 PID echo $$
。在第二个终端中,我执行了 tail 命令(没有 root 权限)。然后我注意到第一个终端的 IO 出现明显的挂起(在 shell 中输入内容被中断,并且有明显的按键延迟)。为什么会发生这种情况?
我运行的是 Ubuntu 18.04。
答案1
跑步strace tail -f /proc/<PID>/fd/1
提供了线索。
输出的最后一行将显示该tail
命令正在等待从进程读取。
读(3,
当您输入原始进程时,一些字符将显示在该进程中,一些字符将显示在strace
命令的输出中。例如,在原始进程中输入“1234”可能会在原始进程中显示 24,并在输出中显示以下行strace
:
读取(3,“1”,8192)= 1
读取(3,“3”,8192)= 1
tail
尽管在没有 的情况下运行时不明显strace
,但该tail
命令会与原始进程竞争对键入内容的访问。