0

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

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

谢谢。

4

2 回答 2

1

尽管 SIGTERM 在少数情况下可以由内核发送,但它几乎总是由另一个用户进程发送。如果您在 gdb 下运行程序,那么当它收到 SIGTERM 时,它将暂停。然后,您可以通过查看$_siginfo结构来获取有关信号的一些信息:

(gdb) print $_siginfo._sifields._kill
$2 = {si_pid = 3926, si_uid = 1001}

这是在 Linux 上。表示pid 3926发送信号,发送信号的userid是1001。

于 2015-04-13T20:33:48.940 回答
0

我的程序以 SIGTERM 信号终止,没有核心转储

预计如果有人向您的程序发送 a ,则不会产生核心转储SIGTERM

而且我不知道如何追踪它。

你需要弄清楚它SIGTERM来自哪里。有人把你的程序发给它,关键问题是谁。

通常在您在启动程序的终端中键入 Control-C 时SIGTERM发送(更正,将发送,而不是),或者您在某些其他终端中键入。SIGINTSIGTERMkill <pid>

于 2015-04-12T05:51:42.543 回答