我正在尝试将 sigwait() 用于 SIGSEGV 和其他信号,然后做一些事情(比如将时间戳写入文件)。然后,我希望程序表现得好像信号从未被捕获(例如,当 SIGSEGV 发生时生成 coredump ——假设系统配置为 coredump)。
我通读了几个手册页,但没有看到明显的方法。
有什么建议吗?
提前致谢!
我相信你不能以你想要的方式处理一些信号,例如
SIGKILL
SIGSEGV
正如手册本身所说,信号 SIGKILL 和 SIGSTOP 不能被捕获或忽略 检查下面的链接
SIGNAL(7)和SIGNAL(2) 这些链接应该提供有关 linux 中信号处理的足够详细信息
但是,您可以注册一个信号处理程序来处理一些其他信号,以便在 linux 等操作系统中列出信号,您可以使用以下命令
kill -l
并且就生成核心转储而言,它是由操作系统生成的,请单击此处了解更多信息
在此处查看示例代码
您可以注册一个不会导致程序崩溃的信号处理程序。收到信号后,您将进入信号处理程序,并在执行信号处理程序(写入您所说的文件)后,您将重新进入您离开的程序。
如果你想要一个核心转储,你可以使用 linux core(5) 命令,它会在你的信号处理程序中创建一个核心转储而不结束你的进程。
http://www.alexonlinux.com/signal-handling-in-linux#signal_masks