Strace
帶有上下文/歷史行數的 strace -p
我想要
strace
一個正在執行的程序,我知道我可以用它來做strace -p <pid>
,但我相信該程序已經掛在一些阻塞呼叫上,例如掛在sem_wait()
一個從未發布過的信號量上,等等,並且輸出strace
只有一行,比如:Process 195 attached - interrupt to quit poll([{fd=3, events=POLLIN}, {fd=6, events=POLLIN}], 2, 3600000^C <unfinished ...>
是否可以指定
strace
輸出更多的上下文/歷史行?我猜不是,因為我猜是strace
實時輸出和每個功能/指令,但我想我會要求確認。
你是對的,沒有可用的歷史記錄。
如果不明顯,輸出顯示程序正在
poll
呼叫中,等待來自文件描述符 3 和 6 的輸入。執行ls -l /proc/195/fd
應該顯示這些描述符連接到什麼。
例如,您還可以使用 附加到程序
gdb
並查看目前堆棧,這可能會有所幫助,特別是如果您已使用調試符號編譯程序,您將獲得更多資訊。例如,
sleep
在後台執行,獲取它的 pid 並使用 pid 和目標文件執行 gdb,然後給出bt
回溯命令。繼續節目類型detach
。$ sleep 999 & [1] 17340 $ gdb -p 17340 /bin/sleep Reading symbols from /bin/sleep...(no debugging symbols found)...done. Attaching to program: /usr/bin/sleep, process 17340 Missing separate debuginfos, use: dnf debuginfo-install coreutils-8.24-8.fc23.x86_64 (gdb) bt #0 0x00007fb84f43d510 in __nanosleep_nocancel () from /lib64/libc.so.6 #1 0x0000562be81da29f in rpl_nanosleep () #2 0x0000562be81da100 in xnanosleep () #3 0x0000562be81d7a1d in main () (gdb) detach Detaching from program: /usr/bin/sleep, process 17340 (gdb) quit