4

Я долго искал лучшую практику для этого сценария.

Если у меня есть process2, это зависит от процесса, запущенного заранее. Я создал псевдоним как:

alias both='process1 & process2'

Затем, когда процесс2 завершается, я бы хотел, чтобы процесс1 также вышел (мое текущее решение - вернуться к терминалу и kill %%).

Например (для подключения к устройству iOS с Mac через USB):

alias usbssh='/usr/local/bin/iproxy 2222 22 & ssh -p 2222 root@localhost'

Как сохранить iproxy и уничтожить его, как только выйдет ssh ?

1 ответ1

4

Просто добавь kill $! до конца: process1 & process2; kill $!

$! является переменной (в Bash, которая до смешного называется "параметром") и будет расширяться до последнего фонового PID в любом месте:

Расширяется до идентификатора процесса задания, которое в последний раз помещается в фоновом режиме, независимо от того, выполняется ли оно как асинхронная команда или с помощью встроенной команды bg (см. УПРАВЛЕНИЕ ЗАДАНИЯМИ ниже).

%% является специальным и будет расширяться до последнего PID фона только в контексте встроенных команд оболочки, таких как fg и kill . К сожалению, это не ясно из man страницы:

Символы %% и%+ относятся к понятию оболочки текущего задания, которое является последним заданием, остановленным, когда оно находилось на переднем плане или началось в фоновом режиме.


PS: Если вам нужно сделать это командной строкой, убедитесь, что kill $! в одинарных кавычках, поэтому он расширяется во время выполнения. Еще лучше написать функцию вместо псевдонима, чтобы избежать их ограничений.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .