Це питання, на яке зверталися кілька разів, не тільки тут, але і на інших сайтах мережі обміну стеками (наприклад, Як змусити 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
вбивають?
EDIT : Якщо замість цього ktserver
я запускаю щось зовсім інше, наприклад gedit
, все працює як шарм (тобто gedit гине, коли зв’язок помирає). Тому в самому процесі може бути щось не так. Наприклад, я подумав, що це може бути ігнорування SIGHUP або SIGINT. Однак, коли я запускаю kill -1 ktserver
або kill -2 ktserver
, процес вмирає так, як очікувалося.
EDIT2 : Як зазначає Марк Плотнік, проблема пов'язана з тим, що на каналі ssh немає циркуляції зв'язку. Я підтвердив, запустивши ssh -t <host> read
і вбивши після цього ssh-процес. read
все ще жив і брикався.
ssh example.com dd ...
робота закінчилася навіть години після того, як ssh
зв’язок вмирає через проблеми з мережею. Якщо ви можете змінитиktserver
щоб скористатися можливістю вивести щось раз на деякий час, це може бути вирішенням проблеми.
read
на віддаленому комп’ютері, і після вбивства ssh-з'єднання read
не помер. На жаль, я не можу змінити ktserver для виведення нічого. Тоді рішення немає?
shopt -s huponexit
). Чи можете ви перевірити, чи працює це для вас?
kill -9 ktserver
?