Project: Mini Process Supervisor

Updated

September 8, 2026

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/worker

Or flags:

minisup -cmd "web=./web" -cmd "worker=./worker"

Requirements

  1. Start all children with Command
  2. Prefix stdout/stderr lines with name
  3. On child exit ≠ 0 → restart with backoff (cap)
  4. SIGTERM → signal children, wait with deadline, then SIGKILL
  5. 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.