2016-04-12 4 views
1

Ich frage mich nur, ob es eine Möglichkeit gibt, ein Userspace-Programm von einem Kernel-Modul zu töten. Ich weiß, dass der Befehl kill nicht funktioniert, da es ein Systemaufruf von Userspace zu Kernelraum ist .Killing ein Userspace-Programm von einem Kernel-Modul

+0

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

Antwort

3

Dieser Code wird den aufrufenden Prozess töten ...

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

Sie sehen können, wie die OOM Killer es hier tut ...

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

+0

Wenn ich die kenne Name des Userspace-Programms, zum Beispiel "xyz", ich möchte von einem Kernel-Modul ein Signal an diesen Prozess senden. Sieht so aus, als ob der obige Code den aktuellen Prozess beendet. – hmdb

+0

Sie müssen die 'Aufgabe' finden und dann ein Signal senden. – Harry

0

Wenn Sie wissen, was syscall sein kann verwendet von Userspace, um Signale zu liefern, warum können Sie nicht überprüfen, wie es implementiert ist? Was aber noch wichtiger ist, warum müssen Sie überhaupt ein Signal senden? Wie bestimmen Sie, was Sie zuerst signalisieren sollen?

Ist das eine andere schreckliche College-Aufgabe?