Как убить процессы на удаленной машине *nix
Я хотел бы выполнить команду kill на многих машинах *nix. Я пытаюсь сделать что-то вроде этого:
rsh <remotemachine> ps -ef | grep <somepattern> | awk '{print $2}' | xargs n1 -t -i kill {}
Но это вызывает команду kill на локальном компьютере, а не на удаленном компьютере. Я также попробовал что-то вроде этого:
rsh <remotemachine> kill $(ps -ef | grep <somepattern> | awk '{print $2}')
Но это не работает для меня тоже.
4 ответа
Предполагая, что вы работаете на машинах, на которых он есть, вы также можете использовать более конкретную утилиту, такую как pgrep или pkill. Это означает, что вам не нужно использовать grep, awk или xargs. Это немного упростит ситуацию.
http://linux.about.com/library/cmd/blcmdl1_pkill.htm
rsh "remotemachine" pkill независимо от процесса
ssh user@someserver "ps -ef | grep | awk '{print $2}' | xargs n1 -t -i kill {}"
Я отказываюсь использовать любой другой метод удаленной консоли, кроме SSH. Это также практически везде.
На всякий случай, я бы порекомендовал вам использовать SSH. RSH отправляет пароли в открытом виде, SSH намного безопаснее.
В любом случае вам понадобится экранировать символы, которые будет интерпретировать локальная оболочка. А именно эти трубы. И одинарные кавычки. И знак доллара. Я думаю, что с фигурными скобками все в порядке, но я, вероятно, буду параноиком и сделаю эти два. Невыполнение этого приводит к тому, что команда RSH передается только в первый канал, а затем вывод этой команды передается локально в grep, awk и т. Д.
Это та команда, которая раздражает. Попробуй это:
rsh <remotemachine> ps -ef \| grep <somepattern> \| awk \'\{print \$2\}\' \| xargs n1 -t -i kill \{\}
- Кристофер Карел
Это возможно на компьютере Windows с помощью taskkill, pskill или другой командой:) К сожалению, это невозможно на компьютере Linux/UNIX без использования ssh, rsh или другого инструмента удаленного сеанса.