Как обрабатывать сигнал SIGABRT в Unix - PullRequest
0 голосов
/ 03 мая 2011

Я получаю дамп памяти при выполнении программы ниже:

$ 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 ]

3 голосов
/ 03 мая 2011

Обычно вы не должны обрабатывать это, цель вызова abort () - создать дамп ядра и завершить работу вашей программы, так же, как это делает ваша программа.

3 голосов
/ 03 мая 2011

удалить abort() из вашего основного ... если вы хотите оставить основной: return; если вы хотите оставить программу в любом месте: exit()

если вы действительно хотите обработать сигнал, установите обработчик сигнала см .: http://www.manpagez.com/man/2/sigaction/

НТН

Mario

2 голосов
/ 03 мая 2011
// 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
$ 
...