В целом я поддерживаю ответ G-Man. Я хотел бы представить быстрое решение, которое может быть достаточно в некоторых обстоятельствах.
Пусть три исполняемых файла будут foo , bar и baz . Предположения:
- вы можете запустить их вручную;
- вы запускаете их как одного и того же пользователя;
- Вы запускаете не более одного
foo , одного bar и одного baz в любой момент времени.
Вместо foo беги foo ; killall bar 2>/dev/null .
Вместо bar беги bar ; killall baz 2>/dev/null .
Вместо baz беги baz ; killall foo 2>/dev/null .
Если вы хотите запустить foo в фоновом режиме, правильный синтаксис выглядит так:
{ foo ; killall bar 2>/dev/null ; } &
Аналогично с bar и baz . Таким образом, вы можете запустить их из одной оболочки, если хотите.
Решение масштабируется до любого разумного количества процессов. Когда один процесс завершается, запускается цепочка killall . Это в конечном итоге сыграет трэш-метал, убивай всех.
Обратите внимание, что вы не должны запускать новый набор процессов, пока не будете уверены, что цепочка убийств завершена.