Как мне изменить код обработчика сигналов SIGKILL, чтобы я мог переопределить ацитин SIGKILL?
могу ли я изменить код обработчика сигнала SIGKILL
comment
Только в начале! Я не знаю, как с этим справиться.
- person Xiliang Song   schedule 12.09.2014
comment
Во-первых, найдите в исходниках ядра функции, связанные с обработкой и доставкой сигналов. Затем читайте исходный код, пока не поймете, как он работает. Затем сделайте свою модификацию.
- person Peter   schedule 12.09.2014
Ответы (2)
Вы не можете.
Сигналы SIGKILL и SIGSTOP нельзя перехватить, заблокировать или проигнорировать. Подробнее читайте здесь
person
tristan
schedule
12.09.2014
Могу ли я изменить код ядра, связанный с обработчиком SIGKILL, и перекомпилировать ядро, чтобы переопределить мою собственную функцию?
- person Xiliang Song; 12.09.2014
конечно можно, но зачем тебе это? Чтобы процесс всегда работал?
- person tristan; 12.09.2014
Ну вот сейчас изучаю ядро и получил задание: переопределить действие SIGKILL для конкретного процесса. Например, когда я использую команду kill -9 PID, процесс PID не будет уничтожен. Тогда что мне делать?
- person Xiliang Song; 12.09.2014
вам нужно отредактировать свой вопрос и добавить тег [домашнее задание]. Я не кодер ядра, но я думаю, вам нужно изменить код доставки сигнала, а не только код обработки сигнала.
- person tristan; 12.09.2014
Я понял! Благодарю вас!
- person Xiliang Song; 12.09.2014
Ну, я делаю это! Спасибо!
- person Xiliang Song; 12.09.2014
Вам нужно определить функцию для обработки, когда происходят исключения:
#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);
надеюсь, это поможет
person
ivzeus
schedule
12.09.2014
В ядре, как это реализовать?
- person Xiliang Song; 12.09.2014