#include #include "syscall.h" #include "proc/proc.h" #include "spinlock/spinlock.h" #include "errors.h" #include "util/util.h" #include "sysdefs/processctl.h" int32_t SYSCALL3(sys_processctl, pid1, cmd1, optsptr1) { uint64_t pid = pid1; uint64_t cmd = cmd1; int32_t ret = E_OK; if (pid == -1) { pid = PROCS.current->pid; } spinlock_acquire(&PROCS.spinlock); Proc *proc = NULL; LL_FINDPROP(PROCS.procs, proc, pid, pid); spinlock_release(&PROCS.spinlock); if (proc == NULL) { ret = E_INVALIDARGUMENT; goto done; } switch (cmd) { case PCTL_KILL: { proc_kill(proc); ret = E_DOSCHEDULING; } break; default: { ret = E_INVALIDARGUMENT; } break; } done: return ret; }