diff options
Diffstat (limited to 'README.md')
| -rw-r--r-- | README.md | 29 |
1 files changed, 29 insertions, 0 deletions
@@ -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 |
