LINUX.ORG.RU

как правильно завершить ssh


0

1

Удалённо выполняю команду

ssh user@host command arg1 arg2 arg3

На своём компьютере убиваю ssh через kill -TERM, ssh убивается, но на удалённом хосте программы, порождённые от command, продолжают выполняться (например, make). Как правильно завершить ssh, чтобы он убил запущенную на удалённом компьютере программу и все порождённые?

Ctrl-C в терминале, затем Ctrl-D

unanimous ★★★★★ ()
Ответ на: комментарий от Zhbert

все ответившие не поняли о чём речь. Я не запускаю ssh в интерактивном режиме, я выполняю команду command удалённо, как написано в начале. Там негде нажимать Ctrl+C или Ctrl+D.

Например:

ssh user@host ls -l /
former_anonymous ★★★ ()

мало того, оно ещё и новые терминалы каждый раз будет создавать, как я понимаю.

не проще ли тебе по ключам авторизацию сделать, и заходить без ввода пароля и набирать exit, когда оно не надо?

Sonsee ()
Ответ на: комментарий от former_anonymous

Непонятно, почему ты шелл не получаешь. Обычно запуск удаленных программ делаются с ключом -f и, соответственно, команда должна завершаться «сама». С другой стороны, всегда можно запустить по ssh kill с нужным PIDом

unanimous ★★★★★ ()
Ответ на: комментарий от unanimous

Обычно запуск удаленных программ делаются с ключом -f


-f мне незачем

соответственно, команда должна завершаться «сама»


а без -f она что-ли не завершается сама? При обычном завершении удалённой программы всё работает нормально. Проблема в том, что когда требуется завершить принудительно, на удалённом хосте остаются дочерние процессы, которые не умирают при разрыве соединения, а продолжают работать.

С другой стороны, всегда можно запустить по ssh kill с нужным PIDом


Я уже склоняюсь к этому варианту, похоже другого нет.

former_anonymous ★★★ ()
Ответ на: комментарий от former_anonymous

pkill -U your_user

Убивает все процессы, запущенные данным пользователем

unanimous ★★★★★ ()

Попробуй

ssh user@host nohup command arg1 arg2 arg3 &
temporary ★★ ()
Ответ на: комментарий от placement_new

нет. Пришлось добавлять на сервер опции ClientAliveCountMax и ClientAliveInterval чтобы по таймауту убивалась потерянная сессия, в этом случае дочерние процессы становятся детьми init. Потом я написал init скрипт, который раз в несколько секунд ищет такие процессы и убивает их и всех их детей.

former_anonymous ★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.