gpt4 book ai didi

linux - 一个进程如何拦截Linux上另一个进程的stdout和stderr?

转载 作者:IT老高 更新时间:2023-10-28 12:37:43 24 4
gpt4 key购买 nike

我有一些脚本本应该停止运行,但会一直挂着。有什么方法可以让我以一种可读的方式弄清楚他们向 STDOUT 和 STDERR 写入的内容吗?

例如,我尝试过这样做:

$ tail -f /proc/(pid)/fd/1

但这并没有真正起作用。无论如何,这是一个很长的镜头。

还有其他想法吗?

strace 本身就非常冗长且难以阅读。

注意:我对他们的输出感兴趣,对其他任何东西都不感兴趣。我有能力自己弄清楚其他事情;这个问题只关注在启动它之后访问正在运行的进程的stdout和stderr。

最佳答案

由于我不允许编辑 Jauco 的答案,我将给出对我有用的完整答案(Russell 的页面依赖于非保证行为,如果您关闭 STDOUT 的文件描述符 1,下一个 creat 调用将打开 FD 1。

所以,像这样运行一个简单的无限脚本:

import time

while True:
print 'test'
time.sleep(1)

保存到test.py,运行

$ python test.py

获取 PID:

$ ps auxw | grep test.py

现在,附上gdb:

$ gdb -p (pid)

然后做 fd 魔法:

(gdb) call creat("/tmp/stdout", 0600)
$1 = 3
(gdb) call dup2(3, 1)
$2 = 1

现在您可以 tail/tmp/stdout 并查看以前转到 STDOUT 的输出。

关于linux - 一个进程如何拦截Linux上另一个进程的stdout和stderr?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/249703/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com