Чому мій віддалений процес все ще запускається після вбивства сеансу ssh?


15

Я підключаю віддалений лог-файл, запускаючи цю команду в локальній оболонці:

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

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

Чи може хтось пролити трохи більше світла, коли надсилаються сигнали про завішування та коли їх немає? Віддаленою машиною є Ubuntu, і моя локальна оболонка - це баш OS X, якщо будь-яка з них має значення.

Відповіді:


13

Така поведінка випливає з відсутності керуючого терміналу для запущеного процесу. Якщо у віддаленому процесі немає керуючого терміналу, віддалений ssh-процес, що обробляє ваш сеанс, не в змозі вбити команду, яку залишають висить у зомбі-стані, щоб її врешті-решт очистити за допомогою init.

Ви можете обійти це, застосувавши його з опцією -t, яка надає йому керуючий термінал. Це призведе до припинення процесу, коли ви віддалено ctrl-c виконайте команду ssh.

Варіант -t :

Примусове виділення псевдо-тти. Це може бути використано для виконання довільних екранних програм на віддаленій машині, що може бути дуже корисно, наприклад, при реалізації служб меню. Опції з декількома параметрами змушують розподіляти tty, навіть якщо ssh не має локальних tty.

Подивіться на man ssh та man sshd, коли ви використовуєте цю опцію, оскільки є інші наслідки наявності керуючого терміналу, наприклад, можливість надсилання символів втечі.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.