Почему мой удаленный процесс все еще бежит за уничтожением ssh сессии?

Я выслеживаю удаленный файл журнала путем выполнения этой команды в локальной оболочке:

ssh remotemachine tail -100f /path/to/error_file

Когда я ctrl-c из этой команды, кажется, что ctrl-c уничтожает локальный процесс ssh и оставляет мой хвост, работающий на удаленной машине. У меня создалось впечатление, что повреждение соединения отправит сигнал зависания (так как я не использую nohup), и уничтожьте процесс, но это - ясно не случай.

Кто-либо может пролить еще некоторый свет на то, когда сигналы зависания отправляются и когда они не? Удаленной машиной является Ubuntu, и моя локальная оболочка является ударом OS X, если любой из тех имеет значение.

15
задан 10.08.2009, 19:04

1 ответ

Это поведение происходит от отсутствия терминала управления для рабочего процесса. Когда удаленный процесс не имеет терминала управления, удаленный процесс ssh, обрабатывающий Вашу сессию, не может уничтожить команду, которую оставляют, зависая в состоянии зомби, которое будет в конечном счете очищено init.

Можно обойти это путем выполнения его с-t опцией, которая дает ему терминал управления. Это заставит процесс завершаться, когда Вы ctrl-c Ваш ssh будете управлять удаленно.

-t опция:

Вызовите pseudo-tty выделение. Это может использоваться для выполнения произвольных основанных на экране программ на удаленной машине, которая может быть очень полезной, например, при реализации сервисов меню. Несколько-t опций вызывают tty выделение, даже если ssh не имеет никакого локального tty.

Взгляните на человека ssh и человека sshd при использовании этой опции, поскольку существуют другие последствия наличия терминала управления, например, способности отправить символы ESC.

13
ответ дан 07.12.2019, 11:09

Теги

Похожие вопросы