39
|
Thomas Vander Stichele · 技术社区 · 16 年前 |
![]() |
1
7
我不确定它是否适合你,但我读了一页前一段时间描述 method that uses gdb |
![]() |
2
41
由于不允许我编辑小渊的答案,我将给出对我有用的完整答案(Russell的页面依赖于无担保的行为,如果您关闭fd 1进行stdout,下一个creat调用将打开fd 1。 所以,运行这样一个简单的无休止脚本:
保存到test.py,运行时使用
得到PID:
现在,附上gdb:
做fd魔术:
现在,您可以跟踪/tmp/stdout并查看用于转到stdout的输出。 |
![]() |
3
9
有几个新的实用程序总结了“gdb方法”,并添加了一些额外的修饰。我现在使用的是“reptyr”(“re pty er”)。除了抓取stderr/stdout之外,它还将实际更改进程的控制终端(即使它以前没有连接到终端)。 最好的用途是启动一个屏幕会话,并使用它将正在运行的进程重新连接到屏幕内的终端,这样您就可以安全地从中分离出来,稍后再返回。 它打包在流行的发行版上(例如:“apt-get-install-reptyr”)。 |
![]() |
4
8
gdb方法似乎更好,但您也可以使用strace来实现这一点: strace-p-e write=1-s 1024-o文件
这会打印出比您需要的(十六进制部分)更多的内容,但您可以轻松地打印出来。 |
![]() |
5
4
我使用strace对十六进制输出进行了编码,以清除文本:
我把这个命令和其他答案结合起来。 |
![]() |
6
2
strace使用just-ewrite(而不是=1后缀)输出的结果要少得多。它比gdb方法,imo简单一点。 我使用它来查看现有MythTV编码作业(sudo,因为我不拥有编码过程)的进度:
|
![]() |
7
2
你可以用REREDIRECT( https://github.com/jerome-pouiller/reredirect/ ) 类型
输出(标准和错误)将写入文件。
重定向
|
![]() |
8
1
您不需要声明您的操作系统,但我将尝试一下并说“Linux”。 查看正在写入stderr和stdout的内容可能没有帮助。如果有用,可以在启动脚本之前使用tee(1)获取stderr和stdout的副本。 您可以使用ps(1)查找wchan。这将告诉您流程正在等待什么。如果查看strace输出,可以忽略大部分输出并标识最后一个(被阻塞的)系统调用。如果是对文件句柄的操作,则可以在输出中向后移动并从中标识底层对象(文件、套接字、管道等),答案可能会很清楚。 您还可以向进程发送一个导致它转储核心的信号,然后使用调试器和核心文件来获取堆栈跟踪。 |
![]() |
MaPo · Linux,设置锁定ICMP_过滤器选项 5 月前 |
![]() |
user2138149 · 双栈网络服务器无法按预期处理ipv4请求 5 月前 |
![]() |
Marco · PyCharm Linux系统文件上os.stat异常 6 月前 |