我只是想知道是否有办法从内核模块中杀死用户空间程序。我知道kill命令不起作用,因为它是从用户空间到内核空间的系统调用。
答案 0 :(得分:4)
此代码将终止调用进程...
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
答案 1 :(得分:0)
如果您知道用户空间可以使用哪些系统调用来传递信号,为什么不能检查它是如何实现的呢?更重要的是,为什么你认为你需要首先发送信号?你如何确定首先发出信号的是什么?
这是另一个超越可怕的大学任务吗?