使用GDB调试SIGTERM

时间:2015-04-12 01:18:49

标签: gdb sigterm

我在stackoverflow上搜索了几个关于调试SIGTERM的问题,但是没有得到我需要的信息。也许,我对这个问题还不熟悉。

我的程序终止了没有核心转储的SIGTERM信号,我不知道如何跟踪它。我的问题是,在GDB中调试此问题的一般方法是什么?

感谢。

2 个答案:

答案 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。