Я хочу начать пару заданий на разных машинах с помощью ssh. Если пользователь прерывает основной script, я хочу закончить все задания.
Вот краткий пример того, что я пытаюсь сделать:
#!/bin/bash
trap "aborted" SIGINT SIGTERM
aborted() {
kill -SIGTERM $bash2_pid
exit
}
ssh -t remote_machine /foo/bar.sh &
bash2_pid=$!
wait
Однако процесс bar.sh все еще работает с удаленной машиной. Если я делаю те же команды в терминальном окне, он отключает процесс на удаленном хосте.
Есть ли простой способ сделать это, когда я запускаю bash script? Или мне нужно сделать это для входа в систему на удаленном компьютере, найти нужный процесс и убить его таким образом?
изменить: Похоже, мне нужно идти с вариантом B, убивая remotescript через другое ssh-соединение
Так что я не хочу знать, как мне получить удаленный? Я пробовал что-то вроде:
remote_pid=$(ssh remote_machine '{ /foo/bar.sh & } ; echo $!')
Это не работает, поскольку он блокируется.
Как ждать, пока переменная будет напечатана, а затем "отпустите" подпроцесс?