I have an ad-hoc case where I as a user want to start a handful of service processes and also be able to interrupt them all together for clean and easy start-stops. The behavior of "docker-compose up" is close to what I want, all the stdout/stderr feeds get to stdout/stderr of my invoking shell, and sigint shuts down all the processes together.
I tried supervisord and circus, but both are a little too production-focused, requiring work arounds to join standard streams, to stay in the foreground, generally not behaving like a foreground process. I'm sure there are decent tools to do this, I've seen it done in plain shell which I would prefer to avoid, but its an option if the boilerplate isn't too extreme.
this result came up on google "overlord" https://github.com/dpedu/overlord which talks about the same kind of goals and troubles, but I don't see any programs here
for common language, say I want to run foo, bar, and baz, merge their stdout/error, and sleep until a sigint which should send sigint to each of the three programs, then wait for each one to exit. again, if I have to do it in shell that's fine, but I'd really like to find out about developer process composition tools if any are built for this kind of task, other than docker-compose,docker,init,or container focused
extra bonus feature would be to preserve the tty info so automatic color would get enabled by subprocesses but no big deal
#!/bin/sh
./foo &
./bar &
./baz &
in writing up this post, I ran into
https://github.com/Yelp/dumb-init
dumb init is actually almost exactly what I was hoping to find, its already packaged in debian, and its config file is a light shell file
#!/usr/bin/dumb-init /bin/sh ./foo & # launch a process in the background ./bar & ./baz # launch another process in the foreground