我可以判断一个进程是否被杀死或者它是否被堆栈转储崩溃了?

时间:2013-05-07 07:54:36

标签: c linux unix

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

(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. 这里如何涉及民意调查系统?
  5. 非常感谢你!

1 个答案:

答案 0 :(得分:3)

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