【问题标题】:could I modify the code of the signal handler of SIGKILL我可以修改 SIGKILL 的信号处理程序的代码吗
【发布时间】:2014-09-12 02:04:43
【问题描述】:

如何修改 SIGKILL 的信号处理程序的代码,以便重新定义 SIGKILL 的 acitin?

【问题讨论】:

  • 刚刚开始!不知道怎么处理。
  • 首先,在内核源代码中搜索与信号处理和传递相关的函数。然后,阅读源代码,直到你了解它是如何工作的。然后,进行修改。

标签: linux linux-kernel signals sigkill


【解决方案1】:

你不能。
信号 SIGKILL 和 SIGSTOP 不能被捕获、阻止或忽略。 阅读更多here

【讨论】:

  • 我可以修改与SIGKILL处理程序相关的内核代码并重新编译内核以重新定义我自己的ation吗?
  • 当然可以,但为什么需要这个?让进程始终运行?
  • 好吧,现在我正在学习内核,我收到了一个任务:为特定进程重新定义 SIGKILL 的操作。例如,当我使用命令 kill -9 PID 时,PID 的进程不会被杀死。那我该怎么办?
  • 您需要编辑您的问题并添加标签 [homework]。我不是内核编码员,但我想您需要修改信号传递代码,而不仅仅是信号处理代码。
  • 我明白了!谢谢!
【解决方案2】:

你需要定义一个函数来处理异常发生时:

#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);

希望有帮助

【讨论】:

  • 在内核中,如何实现?
猜你喜欢
  • 2011-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-27
  • 2023-03-26
相关资源
最近更新 更多