pmux/README.md

80 lines
3.5 KiB
Markdown
Raw Normal View History

2021-09-21 22:36:50 +00:00
# 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](pmux-example.yml), which shows off
all possible configuration options.
2021-09-22 01:10:22 +00:00
The stdoutput from this example config looks something like this:
2021-09-21 22:36:50 +00:00
```
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 ...
pmux ~ interrupt signal received, killing all sub-processes
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
pmux ~ exited gracefully, ciao!
2021-09-21 22:36:50 +00:00
```