【问题标题】:Linux kernel module signal on userspace process killed用户空间进程上的Linux内核模块信号被杀死
【发布时间】:2013-03-02 19:08:29
【问题描述】:

我想知道当用户空间应用程序/进程被杀死时,是否有可以在 Linux 内核模块中使用的钩子?

【问题讨论】:

  • 是只针对特定进程还是所有进程?您是否对接收某些信号的进程感兴趣,或者该进程也只是优雅地退出?
  • ARM#include <asm/thread_notify.h>thread_register_notifier()。使用THREAD_NOTIFY_EXIT。见:git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/…
  • @Tuxdude:它适用于所有进程和任何信号。在我的情况下,我的内核模块正在根据 PID 保存一些数据,并且必须在进程终止后立即对其进行清理。
  • @BillPringlemeir 谢谢你我正在查看你的链接并尝试看看我是否可以在非 ARM 架构上做点什么:)
  • 直到现在查看内核源代码,我发现 LSM 有一个 task_free 钩子.. 但不幸的是我无法钩住它。现在我在查看该链接后查看 cgroups:linux-kernel.2935.n7.nabble.com/…。我还找到了这个链接:stackoverflow.com/questions/13863270/…,但我觉得它很难看 :-(.

标签: linux-kernel hook kill-process


【解决方案1】:

您可以先在内核模块中注册通知链。

get_signal_to_deliver(kernel/signal.c) 中,任何刚刚(恕我直言,这是一个相对术语)被杀死的进程都有其PF_SIGNALED 标志正在设置。在这里,您可以使用它的 tcomm 字段来检查 current 进程的名称,如下所示:

char tcomm[sizeof(current->comm)];
get_task_comm(tcomm, current);

如果确实是有问题的进程,您可以触发通知链,这将唤醒您一直在该链上等待的模块。

【讨论】:

  • 谢谢!我会看看这个!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-01-21
  • 1970-01-01
  • 2013-04-29
  • 2017-06-17
  • 1970-01-01
  • 2013-06-16
  • 1970-01-01
相关资源
最近更新 更多