2

我正在尝试将 sigwait() 用于 SIGSEGV 和其他信号,然后做一些事情(比如将时间戳写入文件)。然后,我希望程序表现得好像信号从未被捕获(例如,当 SIGSEGV 发生时生成 coredump ——假设系统配置为 coredump)。

我通读了几个手册页,但没有看到明显的方法。

有什么建议吗?

提前致谢!

4

2 回答 2

0

我相信你不能以你想要的方式处理一些信号,例如

SIGKILL
SIGSEGV

正如手册本身所说,信号 SIGKILL 和 SIGSTOP 不能被捕获或忽略 检查下面的链接

SIGNAL(7)SIGNAL(2) 这些链接应该提供有关 linux 中信号处理的足够详细信息

但是,您可以注册一个信号处理程序来处理一些其他信号,以便在 linux 等操作系统中列出信号,您可以使用以下命令

kill -l

并且就生成核心转储而言,它是由操作系统生成的,请单击此处了解更多信息

在此处查看示例代码

于 2013-05-14T13:17:42.147 回答
0

您可以注册一个不会导致程序崩溃的信号处理程序。收到信号后,您将进入信号处理程序,并在执行信号处理程序(写入您所说的文件)后,您将重新进入您离开的程序。

如果你想要一个核心转储,你可以使用 linux core(5) 命令,它会在你的信号处理程序中创建一个核心转储而不结束你的进程。

http://www.alexonlinux.com/signal-handling-in-linux#signal_masks

于 2013-05-14T13:15:16.543 回答