目前,我抓住了SIGSEGV,给自己发了一封电子邮件,然后abort(),这样我就可以得到一个核心文件并调试我的程序。 (如果我没有抓到,我将无法知道我的特定程序是否已被发现。我的程序是在我自己的服务器上运行的。)
我是否还有其他信号需要调试或出于我应该了解的原因?
答案 0 :(得分:3)
是什么让你认为SEGV已经已经已经损坏了程序内存,以至于尝试发送电子邮件不会失败?
您应该遵循责任分工的做法,并从完全不同的计划中监控您的计划。
只需拥有一个(非常简单,因此它失败的可能性很小)程序,它会检查以确保您的主程序仍在运行,如果没有,则向您发送该电子邮件。您甚至可以进行纵深防御并运行两个检查程序,这两个检查程序都会检查主程序和彼此。
如果你像我一样偏执狂,你甚至可以在不同的机器上运行它们: - )
答案 1 :(得分:0)
好吧,如果您的程序附加到控制台,您可能希望捕获SIGINT以转储/清除您正在扣留的任何缓冲区/日志。
答案 2 :(得分:0)
你可能不应该抓住SIGSEGV / SIGBUS等。
你应该做的是编写一个包装器程序,它将检测子进程是否从信号中退出,并确定问题,然后该进程可以执行任何所需的操作。
如果是服务器进程,如果意外失败,您可能还想重新启动。