Как отправить Ctrl-C
в несколько процессов ssh -t
в Popen()
объекты?
У меня есть код Python, который запускает script на удаленном хосте:
# kickoff.py
# i call 'ssh' w/ the '-t' flag so that when i press 'ctrl-c', it get's
# sent to the script on the remote host. otherwise 'ctrol-c' would just
# kill things on this end, and the script would still be running on the
# remote server
a = subprocess.Popen(['ssh', '-t', 'remote-host', './script.sh', 'a'])
a.communicate()
Это отлично работает, но мне нужно запустить несколько сценариев на удаленном хосте:
# kickoff.py
a = subprocess.Popen(['ssh', '-t', 'remote-host', './script.sh', 'a'])
b = subprocess.Popen(['ssh', '-t', 'remote-host', './script.sh', 'b'])
a.communicate()
b.communicate()
Результатом этого является то, что Ctrl-C
не надежно убивает все, и мой терминал всегда становится искаженным впоследствии (мне нужно запустить 'reset'). Итак, как я могу убить оба удаленных сценария, когда главный убит?
Примечание. Я пытаюсь избежать входа в удаленный хост, ища "script.sh" в списке процессов и отправляя SIGINT для обоих процессов. Я просто хочу, чтобы можно было нажать Ctrl-C
на старте script и убить оба удаленных процесса. Менее оптимальное решение может включать детерминированный поиск PID удаленных сценариев, но я не знаю, как это сделать в моей текущей настройке.
Обновление: script, который запускается на удаленном сервере, фактически запускает несколько дочерних процессов, и, убивая ssh
, он убивает оригинальный удаленный script (возможно, b/c SIGHUP), дети задачи не убиты.