我正在尝试将sigwait()用于SIGSEGV和其他信号,然后执行某些操作(将时间戳写入文件)。然后,我希望程序表现得好像信号从未被捕获(例如,当SIGSEGV发生时生成coredump - 假设系统配置为coredump)。
我通过几个联机帮助页阅读,但我没有看到明显的方法。
有什么建议吗?
提前致谢!
答案 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