【发布时间】:2016-04-12 19:03:36
【问题描述】:
我只是想知道是否有办法从内核模块中杀死用户空间程序。我知道 kill 命令不起作用,因为它是从用户空间到内核空间的系统调用。
【问题讨论】:
标签: c linux-kernel kernel-module
我只是想知道是否有办法从内核模块中杀死用户空间程序。我知道 kill 命令不起作用,因为它是从用户空间到内核空间的系统调用。
【问题讨论】:
标签: c linux-kernel kernel-module
这段代码会杀死调用进程...
int signum = SIGKILL;
task = current;
struct siginfo info;
memset(&info, 0, sizeof(struct siginfo));
info.si_signo = signum;
int ret = send_sig_info(signum, &info, task);
if (ret < 0) {
printk(KERN_INFO "error sending signal\n");
}
你可以在这里看到OOM杀手是如何做到的......
http://lxr.free-electrons.com/source/mm/oom_kill.c?v=3.16#L516
【讨论】:
task,然后给它发送信号。
send_sig_info(SIGKILL, SEND_SIG_PRIV, task); 使用 SEND_SIG_PRIV 还可以避免检查较新的内核,这些内核使用 kernel_siginfo 而不是 siginfo
如果您知道用户空间可以使用哪些系统调用来传递信号,为什么不检查它是如何实现的?更重要的是,为什么您认为首先需要发送信号?首先,您如何确定要发出什么信号?
这是另一个可怕的大学作业吗?
【讨论】: