1

当进程被杀死时,我得到了一个转储堆栈。

(gdb)
Thread 2 (Thread 0xf6ec6b90 (LWP 10941)):
#0  0xffffe410 in __kernel_vsyscall ()
#1  0xf7a47525 in *__GI___poll (fds=0xf7fb1558, nfds=1, timeout=-1)
    at ../sysdeps/unix/sysv/linux/poll.c:87
#2  0xf7f9138a in timer_thread_entry (arg=0x0)
    at ../../../ux/com_ux/libux/com/UXtimer2.c:509
#3  0xf797be7b in start_thread (arg=0xf6ec6b90) at pthread_create.c:298
#4  0xf7a4ff9e in clone () from /lib/libc.so.6

Thread 1 (Thread 0xf796d8d0 (LWP 10686)):
#0  0xffffe410 in __kernel_vsyscall ()
#1  0xf7a517d9 in __libc_msgrcv (msqid=1736749, msgp=0xff99cb78, msgsz=2160,
    msgtyp=0, msgflg=0) at ../sysdeps/unix/sysv/linux/msgrcv.c:59
#2  0xf7f6f647 in _CT_getmsg (mode=0, msgp=0xff99cb78, pmaxtime=0xff99cb6c,
    pdata=0xf7faf180, ux_type=0) at ../../../ux/com_ux/libux/com/UXipc.c:2550
#3  0xf7f6fec5 in CT_getmsg_v2 (mode=0, msgp=0xff99cb78, maxtime=10000,
    ux_type=0) at ../../../ux/com_ux/libux/com/UXipc.c:2237
#4  0x0804afe9 in main (argc=1, argv=0xff99d4b4)
    at ../../../../main/CT_main.cpp:271
#0  0xffffe410 in __kernel_vsyscall ()
  1. 为什么有两个线程?它们是如何联系在一起的?
  2. 通过这种转储,它是否可以显示该进程本身崩溃了,或者被其他进程杀死了。
  3. 在“0xf7a47525 in * GI _poll (fds=0xf7fb1558, nfds=1, timeout=-1)”中,“timeout=-1”是什么意思?
  4. 怎么轮询系统调用在这里涉及?

非常感谢!

4

1 回答 1

3
  1. 在主程序函数 clone() 的某个地方被调用来创建单独的线程 - 显然是用于套接字处理。
  2. 由于它的参数,该进程很可能在 msgrcv() 函数中崩溃。如果由于信号而创建崩溃转储,您将在堆栈跟踪中看到信号处理程序。
  3. timeout = -1 表示无限超时。
  4. 它没有涉及 - 线程被阻塞在其中。
于 2013-05-07T08:47:02.063 回答