Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Logging & Output

Procman captures all process output and writes it to both the terminal and log files.

Multiplexed stdout

All process output is interleaved on procman’s stdout with right-aligned name labels and a | separator:

 procman | started with 3 process(es), mode=run
     web | listening on :8080
  worker | processing jobs
     web | GET /health 200

The name column width adjusts to the longest process name so that all | separators align.

Log directory

At startup, procman creates (or recreates) a procman-logs/ directory in the current working directory. Any existing procman-logs/ directory is removed first to ensure a clean state.

Combined log

procman-logs/procman.log contains every line from every process, in the same right-aligned format as the terminal output. This is a complete record of the session.

Per-process logs

Each process gets its own log file at procman-logs/<name>.log. These files contain only that process’s output lines with no name prefix — just the raw output. This makes them easy to feed into other tools or search with grep.

The procman pseudo-process does not get its own per-process log file. Supervisor messages appear only in the combined log and on stdout.

Supervisor messages

Procman logs its own messages under the procman name. These include:

  • Startup information (process count, mode).
  • Dependency status (waiting, satisfied).
  • Process lifecycle events (started, completed, exited, killed).
  • Shutdown sequence progress.
  • Error messages.

stderr handling

Each child process has stderr redirected to stdout (dup2) before exec. This means both streams are captured through the same pipe and appear interleaved in the logs. There is no separate stderr log.

Dynamic processes

Processes added via the FIFO (see Dynamic Process Management) get their log files created on demand. They appear in both the combined log and get their own per-process log file, just like statically configured processes.