我可以告诉进程是否被杀死或它自己崩溃的堆栈转储



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

(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. 在"0xf7a47525 In *GI_poll (fds=0xf7fb1558, nfds=1, timeout=-1)"中,"timeout=-1"是什么意思?
  3. 投票系统调用是如何涉及到这里的?

非常感谢!

    在主程序的某个地方调用了clone()函数来创建单独的线程-显然是用于套接字处理。很可能是msgrcv()函数的参数导致进程崩溃。如果由于信号而创建崩溃转储,您将在堆栈跟踪中看到信号处理器。
  1. timeout = -1表示无限超时
  2. 未涉及-线程被阻塞在其中。

相关内容

最新更新