Langkah pertama saya adalah menjalankan strace pada proses, terbaik
strace -s 99 -ffp 12345
jika ID proses Anda adalah 12345. Ini akan menunjukkan kepada Anda semua syscall yang sedang dilakukan program. Cara melacak suatu proses memberi tahu Anda lebih banyak.
Jika Anda bersikeras untuk mendapatkan stacktrace, google memberi tahu saya yang setara adalah pstack. Tetapi karena saya belum menginstalnya, saya menggunakan 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)
Dua jawaban telah diberikan untuk menemukan jejak tumpukan suatu program (ingat untuk menginstal simbol debugging terlebih dahulu!). Jika Anda ingin mengetahui di mana panggilan sistem macet, periksa /proc/PID/stack
, yang mencantumkan tumpukan kernel. Contoh:
$ cat /proc/self/stack
[<ffffffff81012b72>] save_stack_trace_tsk+0x22/0x40
[<ffffffff81213abe>] proc_pid_stack+0x8e/0xe0
[<ffffffff81214960>] proc_single_show+0x50/0x90
[<ffffffff811cd970>] seq_read+0xe0/0x3e0
[<ffffffff811a6a84>] vfs_read+0x94/0x180
[<ffffffff811a7729>] SyS_read+0x49/0xb0
[<ffffffff81623ad2>] system_call_fastpath+0x16/0x1b
[<ffffffffffffffff>] 0xffffffffffffffff
Pada sebagian besar sistem unix, Anda dapat menggunakan GDB.
gdb -batch -ex bt -p 1234
Ada juga pstack
(bukan utilitas standar, Anda mungkin harus menginstalnya secara manual). Sepertinya setara dengan procstack
AIX . Tapi di Debian wheezy amd64 saya, sepertinya selalu error. Pada i386, untuk program yang dikompilasi tanpa simbol debug, program tidak mencetak simbol apa pun, bahkan dari pustaka yang simbol debugnya tersedia.
Anda juga dapat menggunakan strace -p1234
untuk melihat panggilan sistem yang dilakukan oleh proses.