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

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

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

/path/to/my/command >> /var/log/command.log

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

我正在寻找类似的东西

cat /proc/PID/redirects

或者

ps -??? | grep PID

但任何方法都可以。

答案1

查看 中的文件描述符 #1 (STDOUT) /proc/$PID/fd/。内核将此文件表示为描述符重定向到的文件的符号链接。

$ readlink -f /proc/20361/fd/1
/tmp/file

答案2

很多答案都提到这样做:

tail -f /proc/{PID}/fd/1

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

cat /proc/{PID}/fd/1

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

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

 /proc/{PID}/fd/0 # STDIN
 /proc/{PID}/fd/1 # STDOUT
 /proc/{PID}/fd/2 # STDERR

答案3

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

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

相关内容