diff options
| author | user <user@clank> | 2026-07-16 11:15:12 +0200 |
|---|---|---|
| committer | user <user@clank> | 2026-07-16 11:15:12 +0200 |
| commit | bb4f468b73c8a888bec1e5b2ba7f1575ab7f8456 (patch) | |
| tree | 24e681e7ca242f3041f6a3effa197445ada451fb /src/programs.asm | |
| parent | kill + ps: implement SYS_KILL (pid 1 immortal) and a ps tool (diff) | |
| download | gbos-bb4f468b73c8a888bec1e5b2ba7f1575ab7f8456.tar.gz gbos-bb4f468b73c8a888bec1e5b2ba7f1575ab7f8456.tar.xz gbos-bb4f468b73c8a888bec1e5b2ba7f1575ab7f8456.zip | |
jobs: background execution (&), non-blocking reap, spin demo
- sys_reap: nohang reap of a finished zombie child (-> pid or 0).
- shell: 'cmd &' launches in the background (prints [pid], no wait); reaps
finished jobs at the prompt ([pid done]). Foreground now waits for its own
child specifically (loops wait(), reporting bg completions meanwhile) so kill
reports the right pid.
- spin: a process that yields forever - a target for ps/kill.
- verified: spin &; ps shows it; kill <pid> removes just that one; immortal
init; self-finishing bg worker reaped with [pid done].
Diffstat (limited to '')
| -rw-r--r-- | src/programs.asm | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/src/programs.asm b/src/programs.asm index f21d40b..e83d29e 100644 --- a/src/programs.asm +++ b/src/programs.asm @@ -94,6 +94,9 @@ ProgPs: SECTION "prog_kill", ROMX[$4000], BANK[19] ProgKill: INCBIN "c/kill.bin" +SECTION "prog_spin", ROMX[$4000], BANK[20] +ProgSpin: + INCBIN "c/spin.bin" ; ----------------------------------------------------------------------------- ; PROG_SH (bank 3) - the shell, now written in C (c/sh.c): parses >/</| and @@ -172,6 +175,8 @@ ProgramTable:: dw ProgPs db LOW(BANK(ProgKill)), HIGH(BANK(ProgKill)) dw ProgKill + db LOW(BANK(ProgSpin)), HIGH(BANK(ProgSpin)) + dw ProgSpin ; ----------------------------------------------------------------------------- ; NameTable (ROM0) - command name -> program id, searched by sys_lookup. @@ -214,4 +219,6 @@ NameTable:: db PROG_PS db "kill", 0 db PROG_KILL + db "spin", 0 + db PROG_SPIN db 0 |
