如何在unix中处理SIGABRT信号

时间:2011-05-03 09:43:00

标签: unix coredump abort sigabrt

我在程序运行时遇到核心转储:

$ cat test2.c

#include <stdio.h>
#include <stdlib.h>


void main()
{

abort();

}

$

$ cc -o test2 test2.c
"test2.c", line 5: warning #2951-D: return type of function "main" must be
          "int"
  void main()
       ^

$ ./test2
Abort(coredump)
$

我收到了SIGABRT信号。请建议我处理这个SIGABRT信号的方法。

3 个答案:

答案 0 :(得分:3)

从您的主要内容中删除abort() 如果你想离开主要:return; 如果您想将该程序留在任何地方:exit()

如果您真的想要处理信号,请安装信号处理程序 见:http://www.manpagez.com/man/2/sigaction/

HTH

马里奥

答案 1 :(得分:3)

您通常不应该处理它,调用abort()的目的是生成核心转储并终止您的程序,就像您的程序一样。

答案 2 :(得分:2)

// here's same code w/signal handler
$ cat test.c
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>

void abort_handler(int);

void main()
{
    if (signal(SIGABRT, abort_handler) == SIG_ERR) {
        fprintf(stderr, "Couldn't set signal handler\n");
        exit(1);
    }
    abort();
    exit(0);
}

void abort_handler(int i)
{
    fprintf(stderr, "Caught SIGABRT, exiting application\n");
    exit(1);
}
$ cc -o test test.c
$ ./test
Caught SIGABRT, exiting application
$