当进程被终止时,我得到了一个转储堆栈。
(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 ()
- 为什么有两个线程?它们是如何联系在一起的?
- 通过这个转储,它能显示进程是自己崩溃的,还是被其他进程杀死的?
- 在"0xf7a47525 In *GI_poll (fds=0xf7fb1558, nfds=1, timeout=-1)"中,"timeout=-1"是什么意思?
- 投票系统调用是如何涉及到这里的?
非常感谢!
- 在主程序的某个地方调用了clone()函数来创建单独的线程-显然是用于套接字处理。很可能是msgrcv()函数的参数导致进程崩溃。如果由于信号而创建崩溃转储,您将在堆栈跟踪中看到信号处理器。
- timeout = -1表示无限超时
- 未涉及-线程被阻塞在其中。