在Linux中重新传播捕获的信号

时间:2013-05-14 13:04:36

标签: c linux signals

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

我通过几个联机帮助页阅读,但我没有看到明显的方法。

有什么建议吗?

提前致谢!

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

我相信你不能按照你想要的方式处理几个信号

SIGKILL
SIGSEGV

作为手册本身状态无法捕获或忽略信号SIGKILL和SIGSTOP 检查以下链接

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

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

kill -l

并且就生成核心转储而言,它是由操作系统click here for more info

生成的

检查示例代码here