Я вхожу на удаленный хост (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