A dumb simple user-space process manager, with internals exposed as a usable go package.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Brian Picciano fde8c2be75 Move to micropelago org 10 months ago
pmuxlib Pass stdout/stderr into pmuxlib.Run 2 years ago
.gitignore initial commit 3 years ago
LICENSE.txt initial commit 3 years ago
README.md Expose Run from pmuxlib (renamed from pmuxproc) 2 years ago
go.mod Move to micropelago org 10 months ago
go.sum Upgrade to yaml.v3 2 years ago
main.go Move to micropelago org 10 months ago
pmux-example.yml Refactor logging to separate stdout/stdout/system lines 2 years ago

README.md

pmux

A dumb simple user-space process manager, for use in composing multiple processes together into a single runable frontend.

Features include (and are limited to):

  • Coalesces all stdout and stderr streams of all sub-processes into a single stdout stream (with timestamps and process names prefixing each line).

  • Propagates interrupt signal to sub-processes, and waits a configurable amount of time before SIGKILLing those which don't exit themselves.

  • Will restart processes which unexpectedly exit, with an exponential backoff delay for those which repeatedly exit.

  • Configurable timestamp format.

That's it. If it's not listed then pmux can't do it.

Usage

To build you just go build . within the directory.

To run you do pmux -c pmux.yml. If -c isn't provided then pmux will look for pmux.yml in the pwd. A config file is required.

Example

This repo contains an example config file, which shows off all possible configuration options.

The stdoutput from this example config looks something like this:

stubborn-pinger ~ starting process
pinger          ~ starting process
stubborn-pinger › PING example.com (93.184.216.34) 56(84) bytes of data.
stubborn-pinger › 64 bytes from 93.184.216.34 (93.184.216.34): icmp_seq=1 ttl=54 time=9.54 ms
stubborn-pinger ›
stubborn-pinger › --- example.com ping statistics ---
stubborn-pinger › 1 packets transmitted, 1 received, 0% packet loss, time 0ms
stubborn-pinger › rtt min/avg/max/mdev = 9.541/9.541/9.541/0.000 ms
pinger          › PING example.com (93.184.216.34) 56(84) bytes of data.
pinger          › 64 bytes from 93.184.216.34 (93.184.216.34): icmp_seq=1 ttl=54 time=9.53 ms
pinger          ›
pinger          › --- example.com ping statistics ---
pinger          › 1 packets transmitted, 1 received, 0% packet loss, time 0ms
pinger          › rtt min/avg/max/mdev = 9.533/9.533/9.533/0.000 ms
pinger          › PING example.com (93.184.216.34) 56(84) bytes of data.
pinger          › 64 bytes from 93.184.216.34 (93.184.216.34): icmp_seq=1 ttl=54 time=11.4 ms
pinger          ›
pinger          › --- example.com ping statistics ---
pinger          › 1 packets transmitted, 1 received, 0% packet loss, time 0ms
pinger          › rtt min/avg/max/mdev = 11.435/11.435/11.435/0.000 ms
stubborn-pinger › PING example.com (93.184.216.34) 56(84) bytes of data.
stubborn-pinger › 64 bytes from 93.184.216.34 (93.184.216.34): icmp_seq=1 ttl=54 time=11.2 ms
stubborn-pinger ›
stubborn-pinger › --- example.com ping statistics ---
stubborn-pinger › 1 packets transmitted, 1 received, 0% packet loss, time 0ms
stubborn-pinger › rtt min/avg/max/mdev = 11.161/11.161/11.161/0.000 ms

... Ctrl-C ...

stubborn-pinger » i will never stop, you will have to SIGKILL me!
pinger          ~ exit code -1, process exited: signal: interrupt
pinger          ~ stopped process handler
stubborn-pinger › PING example.com (93.184.216.34) 56(84) bytes of data.
stubborn-pinger › 64 bytes from 93.184.216.34 (93.184.216.34): icmp_seq=1 ttl=54 time=14.8 ms
stubborn-pinger ›
stubborn-pinger › --- example.com ping statistics ---
stubborn-pinger › 1 packets transmitted, 1 received, 0% packet loss, time 0ms
stubborn-pinger › rtt min/avg/max/mdev = 14.793/14.793/14.793/0.000 ms
stubborn-pinger ~ forcefully killing process
stubborn-pinger ~ exit code -1, process exited: signal: killed
stubborn-pinger ~ stopped process handler