我有一些脚本应该已经停止运行,但是永远挂在后面。有什么办法可以使我以一种可读的方式弄清楚它们正在向STDOUT和STDERR写入什么?
例如,我尝试这样做:
$ tail -f /proc/(pid)/fd/1
但是那实际上不起作用。无论如何,这是一个远景。
还有其他想法吗?
strace
本身很冗长,因此看不清。
注意:我only对它们的输出感兴趣,而不对其他任何东西感兴趣。我有能力自己弄清其他事情;此问题仅关注于访问正在运行的进程after启动它的stdout和stderr。
我有一些脚本应该已经停止运行,但是永远挂在后面。我是否可以通过某种方式以一种可读的方式弄清楚它们正在向STDOUT和STDERR写入什么内容?例如,我尝试过...
我不确定它是否对您有用,但是我读了一段时间描述method that uses gdb的页面
由于不允许我编辑Jauco的答案,所以我将给出对我有用的完整答案(Russell的页面依赖于无保证的行为,如果您关闭STDOUT的文件描述符1,则下一个creat
调用将打开FD 1。
[有几个新的实用程序包装了“ gdb方法”,并增加了一些额外的功能。我现在使用的那个叫做“ reptyr”(“ Re-PTY-er”)。除了获取STDERR / STDOUT之外,它实际上还会更改进程的控制终端(即使先前未连接到终端)。
GDB方法似乎更好,但是您也可以使用strace
:
我使用了strace并解码了十六进制输出以清除文本:
strace
仅使用-ewrite
(而不是=1
后缀)输出少得多。它比IMO的GDB方法要简单一些。
您没有声明您的操作系统,但是我要刺一口说“ Linux”。