diff options
| author | Richard Qin <richard.qin.x@gmail.com> | 2026-01-04 14:05:49 +0800 |
|---|---|---|
| committer | Richard Qin <richard.qin.x@gmail.com> | 2026-01-04 14:05:49 +0800 |
| commit | d3cf3f08d1343d6b265516d5a79ce2d197b59d26 (patch) | |
| tree | a4bbae6cff94fa69eea30db865267b211eb4c86b /src/kernel/proc | |
| parent | 210025560c80b48af4875af199f183ad709e3bf0 (diff) | |
| download | lume-d3cf3f08d1343d6b265516d5a79ce2d197b59d26.tar.gz lume-d3cf3f08d1343d6b265516d5a79ce2d197b59d26.tar.xz | |
feat(file-system): implement read and write FAT32 File System and basic shell
Diffstat (limited to 'src/kernel/proc')
| -rw-r--r-- | src/kernel/proc/proc.cc | 32 |
1 files changed, 31 insertions, 1 deletions
diff --git a/src/kernel/proc/proc.cc b/src/kernel/proc/proc.cc index 5db5f7a..6940a3e 100644 --- a/src/kernel/proc/proc.cc +++ b/src/kernel/proc/proc.cc @@ -152,7 +152,8 @@ void forkret() struct cpu *c = mycpu(); c->runqueue->lock.release(); - Drivers::uart_puts("[Proc] forkret: jumping to user.\n"); + // Debug + // Drivers::uart_puts("[Proc] forkret: jumping to user.\n"); // Enter user mode usertrapret(); @@ -185,6 +186,7 @@ static Proc *allocproc() p->state = USED; p->pid = nextpid++; p->priority = 0; + p->killed = 0; p->cpu = mycpu(); p->cwd = nullptr; for (int i = 0; i < NOFILE; i++) @@ -587,6 +589,34 @@ namespace ProcManager } } + int kill(int pid) + { + Proc* p; + proc_mem_lock.acquire(); + for (p = proc_list_head; p != nullptr; p = p->all_next) + { + if (p->pid == pid) + { + p->killed = 1; + + if (p->state == SLEEPING) + { + p->state = RUNNABLE; + + struct cpu *c = mycpu(); + c->runqueue->lock.acquire(); + c->runqueue->enqueue(p); + c->runqueue->lock.release(); + } + + proc_mem_lock.release(); + return 0; + } + } + proc_mem_lock.release(); + return -1; + } + int growproc(int n) { uint64 sz; |
