aboutsummaryrefslogtreecommitdiffstats
path: root/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'README.md')
-rw-r--r--README.md29
1 files changed, 29 insertions, 0 deletions
diff --git a/README.md b/README.md
index b0a2edf..fe8a930 100644
--- a/README.md
+++ b/README.md
@@ -263,6 +263,35 @@ so we use SDCC's native asxxxx path and INCBIN the blob instead. String literals
with embedded control chars are also mangled in rgbds mode; C programs pass
explicit lengths and emit newlines via `nl()`.
+## Processes & jobs
+
+Every process has a **pid** (1–255, monotonic) and a parent. `getpid`, `wait`,
+and a full lifecycle (`fork`/`exec`/`exit`/reaping) already existed; on top of
+that:
+
+- **`ps`** lists live processes (`pid state command`); state is `R`eady,
+ `B`locked (in `wait`), or `Z`ombie. The PCB records the running program id
+ (`PROC_PROG`) so `ps` can show names.
+- **`kill <pid>`** terminates a process (`sys_kill`): marks it a zombie,
+ reparents its children to init, wakes a `wait`-blocked parent. **pid 1
+ (init/the shell) is immortal** — `kill 1` is refused.
+- **Background jobs:** `cmd &` runs without waiting; the shell prints `[pid]`
+ and reaps finished jobs (non-blocking `reap`), printing `[pid done]`.
+
+```
+$ spin & # a process that just yields forever
+[2]
+$ ps
+1 B sh
+2 R spin
+3 R ps
+$ kill 2
+[2 done]
+$ ps
+1 B sh
+5 R ps
+```
+
## Filesystem
A tiny **RAM filesystem** lives in **WRAMX (`$D000-$DFFF`, 4 KiB)** — always