From: James S. <mi...@st...> - 2001-07-19 16:02:45
|
Hi heres a quick patch for adding kill for mconsole like the sysrq version. diff -uNrX uml-dontdiff linux-2.4.6-um5.orig/arch/um/drivers/mconsole_kern.c linux-2.4.6-um5/arch/um/drivers/mconsole_kern.c --- linux-2.4.6-um5.orig/arch/um/drivers/mconsole_kern.c Sat Jul 14 17:33:36 2001 +++ linux-2.4.6-um5/arch/um/drivers/mconsole_kern.c Thu Jul 19 15:38:59 2001 @@ -99,6 +99,7 @@ config <dev>=<config> - Add a new device to UML; same syntax as command line remove <dev> - Remove a device from the client + kill <type> - Kill user or all tasks " void mconsole_help(struct mconsole_request *req) @@ -174,6 +175,30 @@ if(err) ok = "ERR"; else ok = "OK"; mconsole_reply(req, ok); +} + +void mconsole_kill(struct mconsole_request *req) { + char *ptr = req->buf; + int even_init = 0; + struct task_struct *p; + + ptr += strlen("kill "); + while(isspace(*ptr)) ptr++; + + if (0 == strcmp(ptr, "all")) + even_init = 1; + if (strcmp(ptr, "user") && even_init == 0) { + mconsole_reply(req, "ERR Must be all or user"); + return; + } + for_each_task(p) { + if (p->mm) { /* Not swapper nor kernel thread */ + if (p->pid == 1 && even_init) /* Ugly hack to kill init */ + p->pid = 0x8000; + force_sig(SIGKILL, p); + } + } + mconsole_reply(req, "OK"); } int mconsole_init(void) diff -uNrX uml-dontdiff linux-2.4.6-um5.orig/arch/um/drivers/mconsole_user.c linux-2.4.6-um5/arch/um/drivers/mconsole_user.c --- linux-2.4.6-um5.orig/arch/um/drivers/mconsole_user.c Sat Jul 14 17:33:36 2001 +++ linux-2.4.6-um5/arch/um/drivers/mconsole_user.c Thu Jul 19 15:38:44 2001 @@ -23,6 +23,7 @@ { "config", mconsole_config }, { "remove", mconsole_remove }, { "help", mconsole_help }, + { "kill", mconsole_kill }, }; char socket_name[256]; diff -uNrX uml-dontdiff linux-2.4.6-um5.orig/arch/um/include/mconsole.h linux-2.4.6-um5/arch/um/include/mconsole.h --- linux-2.4.6-um5.orig/arch/um/include/mconsole.h Sat Jul 14 17:33:37 2001 +++ linux-2.4.6-um5/arch/um/include/mconsole.h Thu Jul 19 14:43:08 2001 @@ -33,6 +33,7 @@ extern void mconsole_reboot(struct mconsole_request *req); extern void mconsole_config(struct mconsole_request *req); extern void mconsole_remove(struct mconsole_request *req); +extern void mconsole_kill(struct mconsole_request *req); #endif -- --------------------------------------------- Web: http://www.stev.org Mobile: +44 07779080838 E-Mail: mi...@st... 5:00pm up 1 day, 14:48, 6 users, load average: 0.16, 0.23, 0.63 |