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