如何捕获重定向到 /dev/null 的正在运行的进程的标准输出

如何捕获重定向到 /dev/null 的正在运行的进程的标准输出

我想捕获正在重定向到的stdout正在运行的进程。我尝试使用系统调用,但是当我关闭 fd“1”时,它被分配给其他文件,因为它是最低的可用 fd 编号。stdout/dev/nullfcntl()

有什么想法如何锁定给定的 fd 并重新分配给其他文件吗?

答案1

我认为你可以通过使用 proc 文件系统来捕获它:

$ cat /proc/<PID>/fd/1

答案2

我相信你可以用来gdb做到这一点。看几个回答这个计算器问题。看起来这可能来自这篇博客文章

答案3

您可以使用重定向(https://github.com/jerome-pouiller/reredirect/)。

reredirect -m /dev/null <PID>

您可以稍后使用以下命令恢复进程的初始输出:

reredirect -N -O <M> -E <N> <PID>

<M>并且<N>由之前启动的重定向提供)。

reredirectREADME还解释了如何重定向到另一个命令。

相关内容