Это вопрос, который был рассмотрен несколько раз, не только здесь, но и на других сайтах сети обмена стека (например, Как заставить 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?