Как мне изменить код обработчика сигнала SIGKILL, чтобы я мог переопределить acitin SIGKILL?Могу ли я изменить код обработчика сигнала SIGKILL
ответ
Вы должны определить функцию для обработки, когда исключение происходит:
#include <stdio.h>
#include <execinfo.h>
#include <signal.h>
#include <stdlib.h>
#include <unistd.h>
void ExceptionHandler(int sig)
{
#define MAXSTACKSIZE (16)
void *stackTraces[MAXSTACKSIZE];
size_t size;
// get void*'s for all entries on the stack
size = backtrace(stackTraces, MAXSTACKSIZE);
// do other stuffs of your own
exit(1);
}
Затем в основном коде зарегистрировать эту функцию (вы можете зарегистрироваться с другим типом исключений, а):
signal(SIGSEGV, ExceptionHandler);
signal(SIGTERM, ExceptionHandler);
signal(SIGINT, ExceptionHandler);
signal(SIGILL, ExceptionHandler);
signal(SIGABRT, ExceptionHandler);
signal(SIGFPE, ExceptionHandler);
Надеюсь, что поможет
В ядре, как его реализовать? –
Вы не можете.
Сигналы SIGKILL и SIGSTOP не могут быть пойманы, заблокированы или проигнорированы. Подробнее here
Могу ли я изменить код ядра, связанный с обработчиком SIGKILL, и перекомпилировать ядро для переопределения моего собственного? –
уверен, что вы могли бы, но зачем вам это нужно? Чтобы процесс всегда работал? – tristan
Ну, теперь я изучаю ядро, и я получил задание: переназначить действие SIGKILL для конкретного процесса. Например, когда я использую команду kill -9 PID, процесс PID woudl не будет убит. Тогда что мне делать? –
Просто в начале! Я не знаю, как с этим бороться. –
Сначала найдите источник ядра для функций, связанных с обработкой и доставкой сигналов. Затем прочитайте исходный код, пока не поймете, как он работает. Затем сделайте свою модификацию. – Peter