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, umbare umbaza 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.