aboutsummaryrefslogtreecommitdiffstats
path: root/c/libc.s
diff options
context:
space:
mode:
authoruser <user@clank>2026-07-16 11:15:12 +0200
committeruser <user@clank>2026-07-16 11:15:12 +0200
commitbb4f468b73c8a888bec1e5b2ba7f1575ab7f8456 (patch)
tree24e681e7ca242f3041f6a3effa197445ada451fb /c/libc.s
parentkill + ps: implement SYS_KILL (pid 1 immortal) and a ps tool (diff)
downloadgbos-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 'c/libc.s')
-rw-r--r--c/libc.s12
1 files changed, 12 insertions, 0 deletions
diff --git a/c/libc.s b/c/libc.s
index bcc8199..2e2516b 100644
--- a/c/libc.s
+++ b/c/libc.s
@@ -187,3 +187,15 @@ _progname:
ld c, #21 ; SYS_PROGNAME
rst #0x30
ret
+
+ .globl _yield, _reap
+ ;; void yield(void)
+_yield:
+ ld c, #11 ; SYS_YIELD
+ rst #0x30
+ ret
+ ;; unsigned char reap(void) -> A (reaped pid, or 0)
+_reap:
+ ld c, #22 ; SYS_REAP
+ rst #0x30
+ ret