Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 哪个信号被传递到信号处理程序中的进程死锁_Linux_Debugging_Gdb_Signals_Core - Fatal编程技术网

Linux 哪个信号被传递到信号处理程序中的进程死锁

Linux 哪个信号被传递到信号处理程序中的进程死锁,linux,debugging,gdb,signals,core,Linux,Debugging,Gdb,Signals,Core,我有一个来自调用信号处理程序后死锁的进程的内核转储。我如何确定发送了哪个信号以及是谁发送的 GDB为接收到信号的线程生成回溯跟踪。在第15帧中调用了信号处理程序 (gdb) bt #0 0x00007fa9c204654b in sys_futex (w=0x7fa9c2263d80, value=2, loop=<value optimized out>) at ./src/base/linux_syscall_support.h:1789 #1 base::internal:

我有一个来自调用信号处理程序后死锁的进程的内核转储。我如何确定发送了哪个信号以及是谁发送的

GDB为接收到信号的线程生成回溯跟踪。在第15帧中调用了信号处理程序

(gdb) bt
#0  0x00007fa9c204654b in sys_futex (w=0x7fa9c2263d80, value=2, loop=<value optimized out>) at ./src/base/linux_syscall_support.h:1789
#1  base::internal::SpinLockDelay (w=0x7fa9c2263d80, value=2, loop=<value optimized out>) at ./src/base/spinlock_linux-inl.h:87
#2  0x00007fa9c204774c in SpinLock::SlowLock (this=0x7fa9c2263d80) at src/base/spinlock.cc:132
#3  0x00007fa9c2037ee3 in Lock (this=0x7fa9c2263d80, start=0x7fa9bb3c04c8, end=0x7fa9bb3c04c0, N=3) at src/base/spinlock.h:75
#4  tcmalloc::CentralFreeList::RemoveRange (this=0x7fa9c2263d80, start=0x7fa9bb3c04c8, end=0x7fa9bb3c04c0, N=3) at src/central_freelist.cc:247
#5  0x00007fa9c203bae4 in tcmalloc::ThreadCache::FetchFromCentralCache (this=0x17efb40, cl=<value optimized out>, byte_size=32) at src/thread_cache.cc:162
#6  0x00007fa9c202b9cb in Allocate (size=<value optimized out>) at src/thread_cache.h:341
#7  do_malloc (size=<value optimized out>) at src/tcmalloc.cc:1068
#8  (anonymous namespace)::do_malloc_or_cpp_alloc (size=<value optimized out>) at src/tcmalloc.cc:1005
#9  0x00007fa9c204bfa8 in tc_realloc (old_ptr=0x0, new_size=32) at src/tcmalloc.cc:1517
#10 0x0000003a358c0f3b in ?? () from /usr/lib64/libstdc++.so.6
#11 0x0000003a358c2adf in ?? () from /usr/lib64/libstdc++.so.6
#12 0x0000003a358c2cae in __cxa_demangle () from /usr/lib64/libstdc++.so.6
#13 0x000000000085f6c7 in my_print_stacktrace ()
#14 0x00000000006a773a in handle_fatal_signal ()
#15 <signal handler called>
#16 tcmalloc::CentralFreeList::FetchFromSpans (this=0x7fa9c2263d80) at src/central_freelist.cc:298
#17 0x00007fa9c2037f88 in tcmalloc::CentralFreeList::RemoveRange (this=0x7fa9c2263d80, start=0x7fa9bb3c1468, end=0x7fa9bb3c1460, N=3) at src/central_freelist.cc:269
#18 0x00007fa9c203bae4 in tcmalloc::ThreadCache::FetchFromCentralCache (this=0x17efb40, cl=<value optimized out>, byte_size=32) at src/thread_cache.cc:162
...
(gdb)bt
#0 0x00007fa9c204654b在/src/base/linux\u syscall\u support的sys\u futex(w=0x7fa9c2263d80,值=2,循环=)中。h:1789
#1 base::internal::SpinLockDelay(w=0x7fa9c2263d80,value=2,loop=)at./src/base/spinlock_linux-inl.h:87
#在src/base/SpinLock.cc:132处的SpinLock::SlowLock中有2个0x00007fa9c24774c(该值=0x7fa9c2263d80)
#3个0x00007fa9c2037ee3在src/base/spinlock处处于锁定状态(此=0x7fa9c2263d80,开始=0x7fa9bb3c04c8,结束=0x7fa9bb3c04c0,N=3)。h:75
#在src/central\u freelist.cc:247处的4 tcmalloc::centralfleelist::RemoveRange(this=0x7fa9c2263d80,start=0x7fa9bb3c04c8,end=0x7fa9bb3c04c0,N=3)
#在src/thread_cache.cc:162处的tcmalloc::ThreadCache::FetchFromCentralCache(this=0x17efb40,cl=,byte_size=32)中的5 0x00007fa9c203bae4
#src/thread_缓存中分配(大小=)中的6 0x00007fa9c202b9cb.h:341
#7在src/tcmalloc.cc:1068
#8(匿名名称空间):在src/tcmalloc.cc:1005处do_malloc_或_cpp_alloc(size=)
#在src/tcmalloc.cc:1517处,tc_realloc中的9 0x00007fa9c204bfa8(旧的_ptr=0x0,新的_尺寸=32)
#10 0x0000003a358c0f3b英寸??()来自/usr/lib64/libstdc++.so.6
#11 0x0000003a358c2adf英寸??()来自/usr/lib64/libstdc++.so.6
#12 0x0000003a358c2cae位于/usr/lib64/libstdc++.so.6中的
#13 0x000000000085f6c7在my_print_stacktrace()中
#手柄中的14 0x00000000006a773a致命信号()
#15 
#16位于src/central\u freelist.cc:298的tcmalloc::CentralFreeList::fetchfromspands(this=0x7fa9c2263d80)
#在src/central\u freelist.cc:269处,tcmalloc::centralfleelist::RemoveRange中的17 0x00007fa9c2037f88(此=0x7fa9c2263d80,开始=0x7fa9bb3c1468,结束=0x7fa9bb3c1460,N=3)
#tcmalloc::ThreadCache::FetchFromCentralCache(this=0x17efb40,cl=,byte_size=32)中的18 0x00007fa9c203bae4位于src/thread_cache.cc:162
...
值得一提的是,
handle\u fatal\u signal()
my\u print\u stacktrace()
都是MySQL函数。其余部分来自谷歌的tcmalloc。

我会尝试“第15帧”移动到信号传递帧,然后是“print$\u siginfo.si\u signo”。看


这至少在Linux上有效,我从您使用的回溯中推测。我不确定是否有其他平台。

如果是x86-64,则可能从帧#14获取有关信号的信息。因此,如果它确实是x86-64,请执行
F14
,然后执行
disas
。请添加您使用的TCMalloc版本的信息。例如,在Tcmalloc2.0版本的这一行中,central_freelist.cc:298有这样的代码:
span->objects=*(重新解释(结果))。这可能意味着span是一个无效的指针,您会得到SIGSEGV。回答如下:$\u siginfo便利变量仅在运行的进程中可用(我只有一个核心转储)。这取决于核心是如何生成的以及您使用的gdb版本。我相信,内核的最新版本将此作为核心说明,而gdb的最新版本知道如何阅读它。gdb补丁于2012年11月8日发布;不确定内核。