首頁>Program>source

我有一些指令碼應该已经停止執行,但是永远掛下来。

有什麼办法可以使他们以一種可讀的方式弄清楚它们正在寫到stdout和stderr吗?

例如,我尝試做

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

但是那真的行不通.無論如何,這是一个漫长的尝試。

還有其他想法吗? strace本身很冗长,因此看不清。

註意:我對它们的輸出感兴趣,而不對其他任何东西感兴趣.我有能力自己弄清其他事情; 這个問题只集中在啟動執行後的程序的stdout和stderr上.前一頁描述了使用gdb的方法

由於不允许我編輯Jauco的答案,因此我將给出對我有用的完整答案(Russell的頁面依赖於毫無保證的行為, 如果您關闭stdout的fd 1,則下一个建立呼叫將打開fd 1。

因此,執行一个簡單的無尽指令碼,如下所示:


將其儲存到test.py,執行


获取pid:


現在,附加gdb:


做FD魔術:


現在,您可以在/ tmp / stdout尾部查看過去用於stdout的輸出。

有几个新實用程式包裝了" gdb方法"並添加了一些額外的功能.我現在使用的那个叫做" reptyr"(" Re-PTy-er").除了获取STDERR / STDOUT之外,它實際上還会更改程序的控製终端(即使先前未連線到终端)。

此方法的最佳用途是啟動一个螢幕会话,並使用它將正在執行的程序重新連線到螢幕內的终端,以便您可以安全地从螢幕上分离出来並稍後再返迴。

它包裝在流行發行版中(例如:" apt-get install reptyr")。

http://onethingwell.org/post/2924103615/reptyr

Gdb方法似乎更好,但是您也可以使用strace做到這一點:

strace -p -e write = 1 -s 1024 -o檔案


此命令輸出的內容超出了您的需要(十六进製部分),但是您可以轻松地將其清除。

我使用了strace並將十六进製輸出解碼以清除文字:


我結合了其他答案中的命令。

最新回復
  • 5月前
    1 #

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

相似問題

  • html:从FF的選擇框中删除轮廓
  • 我们如何按類為jquery驗證插件指定規則?