Adds kill to the monitor
authorBarret Rhoden <brho@cs.berkeley.edu>
Fri, 25 Apr 2014 23:43:25 +0000 (16:43 -0700)
committerBarret Rhoden <brho@cs.berkeley.edu>
Fri, 25 Apr 2014 23:43:25 +0000 (16:43 -0700)
Got tired of procinfo kill PID.  Too much typing.  =)

kern/include/monitor.h
kern/src/monitor.c

index 2d34bde..cbb9113 100644 (file)
@@ -23,6 +23,7 @@ int mon_bin_ls(int argc, char **argv, struct hw_trapframe *hw_tf);
 int mon_bin_run(int argc, char **argv, struct hw_trapframe *hw_tf);
 int mon_manager(int argc, char **argv, struct hw_trapframe *hw_tf);
 int mon_procinfo(int argc, char **argv, struct hw_trapframe *hw_tf);
+int mon_kill(int argc, char **argv, struct hw_trapframe *hw_tf);
 int mon_exit(int argc, char **argv, struct hw_trapframe *hw_tf);
 int mon_kfunc(int argc, char **argv, struct hw_trapframe *hw_tf);
 int mon_notify(int argc, char **argv, struct hw_trapframe *hw_tf);
index fd01270..d41ee50 100644 (file)
@@ -55,6 +55,7 @@ static command_t (RO commands)[] = {
        { "bin_run", "Create and run a program from /bin", mon_bin_run},
        { "manager", "Run the manager", mon_manager},
        { "procinfo", "Show information about processes", mon_procinfo},
+       { "kill", "Kills a process", mon_kill},
        { "exit", "Leave the monitor", mon_exit},
        { "kfunc", "Run a kernel function directly (!!!)", mon_kfunc},
        { "notify", "Notify a process.  Vcoreid will skip their prefs", mon_notify},
@@ -386,6 +387,26 @@ int mon_procinfo(int argc, char **argv, struct hw_trapframe *hw_tf)
        return 0;
 }
 
+int mon_kill(int argc, char **argv, struct hw_trapframe *hw_tf)
+{
+       struct proc *p;
+       int8_t irq_state = 0;
+       if (argc < 2) {
+               printk("Usage: kill PID\n");
+               return 1;
+       }
+       p = pid2proc(strtol(argv[1], 0, 0));
+       if (!p) {
+               printk("No such proc\n");
+               return 1;
+       }
+       enable_irqsave(&irq_state);
+       proc_destroy(p);
+       disable_irqsave(&irq_state);
+       proc_decref(p);
+       return 0;
+}
+
 int mon_exit(int argc, char **argv, struct hw_trapframe *hw_tf)
 {
        return -1;