查看正在运行的进程的 STDOUT 重定向

Ric*_*ich 19 shell io-redirection open-files

如果我使用此命令启动应用程序:

/path/to/my/command >> /var/log/command.log
Run Code Online (Sandbox Code Playgroud)

并且命令没有返回,有没有办法从另一个提示中查看 STDOUT 重定向设置为什么?

我正在寻找类似的东西

cat /proc/PID/redirects
Run Code Online (Sandbox Code Playgroud)

或者

ps -??? | grep PID
Run Code Online (Sandbox Code Playgroud)

但任何方法都可以。

Pet*_*zel 26

/proc/$PID/fd/. 内核将此文件表示为指向描述符重定向到的文件的符号链接。

$ readlink -f /proc/20361/fd/1
/tmp/file
Run Code Online (Sandbox Code Playgroud)

  • 在 MacOS 上有什么方法可以做到这一点吗?/proc/<pid>/fd/1 不存在,也许我可以使用 mkfifo? (2认同)

小智 12

很多答案都提到这样做:

tail -f /proc/{PID}/fd/1
Run Code Online (Sandbox Code Playgroud)

然而,我发现它并不总是有效。或者,cat有时会产生结果。

cat /proc/{PID}/fd/1
Run Code Online (Sandbox Code Playgroud)

其中 {PID} 可以使用命令查找ps aux

另外值得一提的是,命令末尾的数字(在本例中为 fd/1)可以更改为其他输出。

 /proc/{PID}/fd/0 # STDIN
 /proc/{PID}/fd/1 # STDOUT
 /proc/{PID}/fd/2 # STDERR
Run Code Online (Sandbox Code Playgroud)


Gil*_*il' 7

一个有用的工具,可以查看哪些进程打开了哪些文件lsof。您可以使用 将其指向特定进程lsof -p1234,您将看到与ls -l /proc/1234/fd在 Linux 下获得的信息大致相同,即打开了哪些文件。

最有用的事情lsof是反过来:lsof /path/to/file告诉您哪些进程正在使用该文件。