Em geral, eu aceito resposta do G-Man . Eu gostaria de apresentar uma solução rápida que pode ser suficiente em algumas circunstâncias.
Deixe os três executáveis em foo
, bar
e baz
. As suposições:
- você pode executá-los manualmente;
- você executa todos eles como o mesmo usuário;
- você gasta no máximo um
foo
, umbar
e umbaz
a qualquer momento.
Em vez de foo
run foo ; killall bar 2>/dev/null
.
Em vez de bar
run bar ; killall baz 2>/dev/null
.
Em vez de baz
run baz ; killall foo 2>/dev/null
.
Se você deseja executar foo
em segundo plano, a sintaxe correta é como:
{ foo ; killall bar 2>/dev/null ; } &
Da mesma forma, com bar
e baz
. Dessa forma, você pode executá-los a partir de um único shell, se desejar.
A solução é dimensionada para qualquer número razoável de processos. Quando um processo termina, uma cadeia de caracteres em cascata de killall
será acionada. Isso acabará por tocar thrash metal matá-los todos.
Note que você não deve iniciar um novo conjunto de processos até ter certeza de que esta cadeia de destruição está concluída.