2016-04-12 4 views
1

Мне просто интересно, есть ли способ убить программу пользовательского пространства из модуля ядра. Я знаю, что команда kill не будет работать, так как это системный вызов из пользовательского пространства в пространство ядра ,Убивать программу пользовательского пространства из модуля ядра

+0

http://www.linuxquestions.org/questions/linux-kernel-70/how-to-send-a-signal-from-a-module-to-a-process-803485/ – vestlen

ответ

3

Этот код будет убить процесс вызова ...

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"); 
} 

Вы можете увидеть, как ООМ убийца делает это здесь ...

http://lxr.free-electrons.com/source/mm/oom_kill.c?v=3.16#L516

+0

Если я знаю, имя программы пользовательского пространства, например «xyz», я хочу отправить сигнал этому процессу из модуля ядра. Похоже, что код выше убивает текущий процесс. – hmdb

+0

Вам нужно найти 'task', затем отправить на него сигнал. – Harry

0

Если вы знаете, что системный вызов может быть используемый пользователями для доставки сигналов, почему вы не можете проверить, как это реализовано? Что еще более важно, почему, по-вашему, вам нужно отправить сигнал в первую очередь? Как вы определяете, что сигнализировать в первую очередь?

Является ли это еще одним ужасным назначением колледжа?

Смежные вопросы