ssh hostname ps aux| egrep '.*python' | grep -v 'grep'| awk '{print $2}'| xargs kill -KILL
当我运行此操作时,我收到错误消息“kill:No such process”
但是当我跑这个时:
ssh hostname ps aux| egrep '.*python' | grep -v 'grep' |awk '{print $2}'| xargs echo
正确打印pid。而且
ps aux| egrep '.*python' | grep -v 'grep'| awk '{print $2}' | xargs kill -KILL
在localhost上正常工作。
答案 0 :(得分:3)
您的命令仅在远程主机上运行ps aux
,其他所有内容都在本地执行。
将其更改为
ssh hostname“ps aux | egrep'。* python'| grep -v'grep'| awk'{print \ $ 2}'| xargs kill -KILL”
引号的使用将整个命令发送到远程主机。然后你必须在\
前添加$2
,因为你在双引号内,那些单引号只是那个时候的字符
答案 1 :(得分:1)
正如其他人所指出的那样,你不能只通过ssh
运行一个管道命令,而不必将命令序列放在引号中。
但是有一种更简单的方法可以做你想做的事情:
ssh hostname pkill python
pkill
命令将为您处理所有进程grepping。
答案 2 :(得分:0)
它无法正常工作,ssh的输出在本地计算机上处理。因此,对kill的调用将尝试在您的机器上终止进程,而不是在远程机器上。
您可以尝试使用expect工具来解决问题。
答案 3 :(得分:0)
这是因为只有第一个命令(ps aux)被提供给ssh作为args。尝试使用引号: ssh主机名“ps aux | egrep'。* python'| grep -v'grep'| awk'{print $ 2}'| xargs kill -KILL”
在这种情况下,“ps aux | egrep'。* python'| grep -v'grep'| awk'{print $ 2}'| xargs kill -KILL”将作为第二个参数传递给ssh命令