Project: Mini Process Supervisor
Project: Mini Process Supervisor
Overview
Build minisup: run multiple child commands, restart on crash, forward signals, aggregate logs—a teaching systemd/overmind lite.
Spec
# procfile-ish
web: ./bin/web -addr :8080
worker: ./bin/workerOr flags:
minisup -cmd "web=./web" -cmd "worker=./worker"Requirements
- Start all children with
Command
- Prefix stdout/stderr lines with name
- On child exit ≠ 0 → restart with backoff (cap)
- SIGTERM → signal children, wait with deadline, then SIGKILL
- Exit when all stopped after shutdown
Signal fanout
cmd := exec.Command(bin, args...)
cmd.SysProcAttr = &syscall.SysProcAttr{Setpgid: true} // Unix: kill group
// On stop: syscall.Kill(-pgid, SIGTERM)Log prefix
cmd.Stdout = prefixWriter{name: "web", w: os.Stdout}Acceptance
- Two children stay up
- Kill one; it restarts
- Ctrl-C stops both within 5s
- Max restarts then give up with error
Stretch
- Health: restart if TCP port fails dial
- Procfile parser
- Status UDS:
minisup status
Chapters: 141, 145, 150, 153.