Почему разрывается соединение, когда я убиваю процесс на удаленном хосте?

Я захожу на удаленный хост (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 самостоятельно.

Другие вопросы по тегам