Почему разрывается соединение, когда я убиваю процесс на удаленном хосте?
Я захожу на удаленный хост (debian) по ssh и выполняю такую команду
ssh user@remote_host "ps -ef | grep process_name | grep -v grep | awk {'print $2'} | xargs kill -9'
тогда связь обрывается.
Я проверяю связь с удаленным хостом и не могу получить никакого ответа, как будто сеть не подключена. Но когда я перезагружаю удаленный хост (выключаю и включаю), все ок. Я обещаю, что убитый процесс - это только программа, написанная мной, а его родительский процесс - это процесс init (если процесс запущен в fg и убит, все в порядке). Есть ли кто-нибудь, кто знает, почему это произошло?
2 ответа
Интересно, что команда, которую вы нам показываете, даже работала без ошибок. Как упоминалось в другом ответе, вы передаете слишком много вещей xargs
/kill
который они рассматривают как мусор.
Используйте что-то вроде этого, чтобы извлечь только PID и убить его
ps -ef | grep process_name | grep -v grep | awk '{print $3}' | xargs kill -9
ps -ef | grep process_name | grep -v grep
дает не только pid того, что вы хотите убить, но и другую информацию, такую как uid, команда процесса, которая может неожиданно убить что-то. Более того, также отображается его ppid (родительский pid, для вас 1), тогда вы знаете, что произойдет.
Вы можете попробовать
ssh user@remote_host "pkill process_name"
или же
ssh user@remote_host "ps -eo pid,cmd | grep process_name | grep -v grep | cut -d' ' -f2 | xargs kill -9"
Или вы можете сначала получить его вывод:
ssh user@remote_host "ps -ef | grep process_name | grep -v grep"
а затем отфильтруйте pid самостоятельно.