Це питання, на яке зверталися кілька разів, не тільки тут, але і на інших сайтах мережі обміну стеками (наприклад, Як змусити 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?