Это вопрос, который был рассмотрен несколько раз, не только здесь, но и на других сайтах сети обмена стека (например, Как заставить ssh убить удаленный процесс, когда я прерываю сам ssh? ). Однако я не могу заставить любое решение работать на меня.
Я запускаю команду через SSH. Всякий раз, когда я выхожу из ssh, я хочу, чтобы команда тоже умерла. Эта команда - демон ktserver, который выполняется бесконечно, пока вы не нажмете Ctrl-C.
Я запускаю его следующим образом: ssh -t compute-0-1 ktserver
и действительно, когда я нажимаю Ctrl-C, процесс завершается изящно, и сессия ssh заканчивается.
Однако если вместо нажатия Ctrl-C я уничтожу процесс ssh с помощью kill
команды (например, отправив SIGINT или SIGHUP), ktserver
процесс останется активным.
Как я могу заставить ktserver
всегда умереть независимо от того, как ssh
его убить?
РЕДАКТИРОВАТЬ : Если вместо того, чтобы ktserver
запустить что-то совершенно другое, например gedit
, все работает как шарм (т.е. gedit умирает, когда умирает соединение). Поэтому, возможно, что-то не так с самим процессом. Например, я подумал, что это может быть игнорирование SIGHUP или SIGINT. Однако когда я запускаю kill -1 ktserver
или kill -2 ktserver
, процесс умирает, как и ожидалось.
РЕДАКТИРОВАТЬ 2 : Как отмечает Марк Плотник, проблема связана с тем, что по каналу SSH не существует связи. Я подтвердил, запустив ssh -t <host> read
и убив процесс ssh впоследствии. read
был еще жив и здоров.
ssh example.com dd ...
задания, выполненные до конца, даже через несколько часов после ssh
прекращения соединения из-за проблем с сетью. Если вы можете изменить ktserver
вариант, чтобы выводить что-то один раз, это может быть обходной путь.
read
на удаленном компьютере, и после разрыва соединения ssh, read
не умер. К сожалению, я не могу изменить ktserver для вывода ничего. Тогда нет решения?
shopt -s huponexit
). Можете ли вы проверить, работает ли это для вас?
kill -9 ktserver
?