我在stackoverflow上搜索了几个关于调试SIGTERM的问题,但是没有得到我需要的信息。也许,我对这个问题还不熟悉。
我的程序终止了没有核心转储的SIGTERM信号,我不知道如何跟踪它。我的问题是,在GDB中调试此问题的一般方法是什么?
感谢。
答案 0 :(得分:0)
我的程序以没有核心转储的SIGTERM信号终止
预期如果有人向您的程序发送SIGTERM
,则不会产生核心转储。
我不知道如何追踪它。
您需要弄清楚SIGTERM
的来源。 有人向你发送你的程序,关键问题是谁。
当您在启动程序的终端中键入Control-C时,通常会发送SIGTERM
(更正,将发送SIGINT
,而不是{{1 }},或者在其他终端中键入SIGTERM
。
答案 1 :(得分:0)
虽然在几种情况下内核可以发送SIGTERM,但它几乎总是由另一个用户进程发送。如果您在gdb下运行程序,那么当它收到SIGTERM时它将暂停。然后,您可以通过查看$_siginfo
结构获取有关信号的一些信息:
(gdb) print $_siginfo._sifields._kill
$2 = {si_pid = 3926, si_uid = 1001}
这是在Linux上。这意味着pid 3926发送了信号,发送它的用户ID是1001。