Назад | Перейти на главную страницу

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

Я вхожу на удаленный хост (debian) по ssh и выполняю такую ​​команду

ssh user@remote_host "ps -ef | grep process_name | grep -v grep | awk {'print $2'} | xargs kill -9'

затем связь обрывается.

Я пингую удаленный хост и не получаю ответа, как будто сеть не подключена. Но когда я перезапускаю удаленный хост (выключаю и включаю), все в порядке. Я обещаю, что убитый процесс - это только программа, написанная мной, а его родительский процесс - это процесс "init" (если процесс запущен в fg и убит, значит, все в порядке). Кто-нибудь знает, почему это произошло?

ps -ef | grep process_name | grep -v grep дает не только пид того, что вы хотите убить, а также другую информацию, такую ​​как 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 самостоятельно.

Интересно, что команда, которую вы нам показываете, даже работала без ошибок. Как упоминалось в другом ответе, вы передаете слишком много вещей xargs/kill которые они рассматривают как мусор.

Используйте что-то вроде этого извлечь только PID и убить его

ps -ef | grep process_name | grep -v grep | awk '{print $3}' | xargs kill -9