aboutsummaryrefslogtreecommitdiffstats
path: root/src/programs.asm
diff options
context:
space:
mode:
authoruser <user@clank>2026-07-16 11:10:45 +0200
committeruser <user@clank>2026-07-16 11:10:45 +0200
commit2d3597c3a02f821bb364b8ecc23fc5949fca738d (patch)
tree714cc7463eb36306f44fcfd67fcf52de0c13b3d1 /src/programs.asm
parentshell: I/O redirection (>/<) and pipes (|); rewrite shell in C (diff)
downloadgbos-2d3597c3a02f821bb364b8ecc23fc5949fca738d.tar.gz
gbos-2d3597c3a02f821bb364b8ecc23fc5949fca738d.tar.xz
gbos-2d3597c3a02f821bb364b8ecc23fc5949fca738d.zip
kill + ps: implement SYS_KILL (pid 1 immortal) and a ps tool
- PCB gains PROC_PROG (running program id), set by exec, inherited on fork. - sys_kill(pid): reject pid 1 (immortal) and unknown/dead pids; mark the target zombie, reparent its children to init, wake its parent if blocked in wait; schedule away if a process kills itself. Reuses FindPcbByPid/ReparentToInit. - sys_ps(slot,buf)->{pid,state,prog}; sys_progname(id) via NameTable reverse lookup. NameTable gains sh/ps/kill. - libc: kill/psget/progname; tools ps (pid state cmd) and kill <pid>. - verified: ps lists sh(B)+ps(R); kill 1 refused; kill 42 fails.
Diffstat (limited to 'src/programs.asm')
-rw-r--r--src/programs.asm16
1 files changed, 16 insertions, 0 deletions
diff --git a/src/programs.asm b/src/programs.asm
index 1a7092e..f21d40b 100644
--- a/src/programs.asm
+++ b/src/programs.asm
@@ -88,6 +88,12 @@ ProgSave:
SECTION "prog_rm", ROMX[$4000], BANK[17]
ProgRm:
INCBIN "c/rm.bin"
+SECTION "prog_ps", ROMX[$4000], BANK[18]
+ProgPs:
+ INCBIN "c/ps.bin"
+SECTION "prog_kill", ROMX[$4000], BANK[19]
+ProgKill:
+ INCBIN "c/kill.bin"
; -----------------------------------------------------------------------------
; PROG_SH (bank 3) - the shell, now written in C (c/sh.c): parses >/</| and
@@ -162,6 +168,10 @@ ProgramTable::
dw ProgSave
db LOW(BANK(ProgRm)), HIGH(BANK(ProgRm))
dw ProgRm
+ db LOW(BANK(ProgPs)), HIGH(BANK(ProgPs))
+ dw ProgPs
+ db LOW(BANK(ProgKill)), HIGH(BANK(ProgKill))
+ dw ProgKill
; -----------------------------------------------------------------------------
; NameTable (ROM0) - command name -> program id, searched by sys_lookup.
@@ -198,4 +208,10 @@ NameTable::
db PROG_SAVE
db "rm", 0
db PROG_RM
+ db "sh", 0
+ db PROG_SH
+ db "ps", 0
+ db PROG_PS
+ db "kill", 0
+ db PROG_KILL
db 0