Просто добавьте kill $!
в конец:process1 & process2; kill $!
$!
является переменной (в Bash, которая до смешного называется «параметром») и будет расширяться до последнего фонового PID в любом месте:
Расширяется до идентификатора процесса задания, которое в последний раз помещается в фоновом режиме, независимо от того, выполняется ли оно как асинхронная команда или с помощью встроенной команды bg (см. УПРАВЛЕНИЕ ЗАДАНИЯМИ ниже).
%%
является особенным и расширяется только до последнего фонового PID в контексте встроенных команд оболочки, таких как fg
и kill
. К сожалению, это не ясно со man
страницы:
Символы %% и% + относятся к понятию оболочки текущего задания, которое является последним заданием, остановленным, когда оно находилось на переднем плане или началось в фоновом режиме.
PS: Если вам нужно сделать это командной строкой, убедитесь, что kill $!
она заключена в одинарные кавычки, чтобы она расширялась во время выполнения. Еще лучше написать функцию вместо псевдонима, чтобы избежать их ограничений .