自定义信号处理,同时又想生成 core dumped 文件

在 UNIX 环境编程时,通常会在收到异常信号时定义自己的处理函数做一些善后工作。

常见的如 SIGABRT,SIGSEGV 信号的默认行为是生成 core 文件然后终止进程,但是当您自定义处理函数后将不再生成 core 文件,但这又非常不利于调试寻找问题。

这里有个婉转办法可以两者兼得,就是在自定义信号处理函数中,恢复默认的处理行为,然后再给自己发送一个信号。示范代码

#include <stdio.h>
#include <signal.h>

static void sig_abrt(int sig)
{
   // put your codes HERE ... 
   printf("run sig_abrt()\n");
   // 还原信号默认处理行为并给自己发送同一个信号
   signal(sig, SIG_DFL);
   raise(sig);
}

int main()
{
  signal(SIGABRT, sig_abrt);
  printf("My PID: %d\n", getpid());
  raise(SIGABRT);
  sleep(100);
}

发表评论

电子邮件地址不会被公开。 必填项已用*标注