Linux

如何知道程序卡在linux中的哪個位置?

  • February 3, 2021

我在我的 ubuntu 伺服器上執行以下命令

root@slot13:~# lxc-stop --name pavan --logfile=test1.txt --logpriority=trace

它似乎無限期地掛起。每當在 AIX 上發生這種情況時,我只是用來獲取違規程序的 PID 並說

$ procstack <pid_of_stuck_process>

它用於顯示程序的整個呼叫堆棧。procstack在 linux/ubuntu 中是否有任何等價物?

我的第一步是在程序上執行 strace,最好

strace -s 99 -ffp 12345

如果您的程序 ID 是 12345。這將顯示程序正在執行的所有系統呼叫。如何 strace 程序會告訴您更多資訊。

如果你堅持要獲取堆棧跟踪,Google告訴我等效的是 pstack。但由於我沒有安裝它,所以我使用 gdb:

tweedleburg:~ # sleep 3600 &
[2] 2621
tweedleburg:~ # gdb
(gdb) attach 2621
(gdb) bt
#0  0x00007feda374e6b0 in __nanosleep_nocancel () from /lib64/libc.so.6
#1  0x0000000000403ee7 in ?? ()
#2  0x0000000000403d70 in ?? ()
#3  0x000000000040185d in ?? ()
#4  0x00007feda36b8b05 in __libc_start_main () from /lib64/libc.so.6
#5  0x0000000000401969 in ?? ()
(gdb)

引用自:https://unix.stackexchange.com/questions/166541