如果我使用以下命令启动应用程序:
/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
告诉您哪些进程正在使用该文件。