【发布时间】:2014-09-12 02:04:43
【问题描述】:
如何修改 SIGKILL 的信号处理程序的代码,以便重新定义 SIGKILL 的 acitin?
【问题讨论】:
-
刚刚开始!不知道怎么处理。
-
首先,在内核源代码中搜索与信号处理和传递相关的函数。然后,阅读源代码,直到你了解它是如何工作的。然后,进行修改。
标签: linux linux-kernel signals sigkill
如何修改 SIGKILL 的信号处理程序的代码,以便重新定义 SIGKILL 的 acitin?
【问题讨论】:
标签: linux linux-kernel signals sigkill
你不能。
信号 SIGKILL 和 SIGSTOP 不能被捕获、阻止或忽略。
阅读更多here
【讨论】:
你需要定义一个函数来处理异常发生时:
#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);
希望有帮助
【讨论】: