【问题标题】:Why does this not kill remote process?为什么这不会杀死远程进程?
【发布时间】:2018-08-03 07:31:49
【问题描述】:

以下命令在本地终端中工作:

ps aux | grep "script.py" | awk {'print $2'} | xargs kill -2

但是这个命令不能远程工作:

ssh -o ConnectTimeout=6 john@remote-pc ps aux | grep "script.py" | awk {'print $2'} | xargs kill -2

...即使远程上的 script.py 属于 john,我们是 ssh 的用户。我可以ping通,其他命令都成功。

【问题讨论】:

  • 只有ps aux在远程机器上运行,其余在本地机器上运行
  • 如果我删除最后的xargs kill -2,那么我仍然会收到远程 pid 的打印,所以我不确定你是否正确。
  • 为什么?如果 ps 从远程机器返回正确的字符串,在本地机器上运行 grep 和 awk 将正常工作
  • 哦,我明白了。谢谢。

标签: linux remote-access kill-process


【解决方案1】:

您需要对管道进行转义以将它们传递给ssh 命令,而不是由您的本地shell 执行,否则ps aux 之后的所有内容都会在您的本地计算机上执行。

ssh -o ConnectTimeout=6 john@remote-pc ps aux \| grep "script.py" \| awk {\'print $2\'} \| xargs kill -2

【讨论】:

  • 谢谢,很高兴知道。事实上,我发现远程执行时还需要对awk 命令中的单引号进行转义。
  • @JSStuball 是的,要做到这一点很棘手,除了简单的命令之外,我倾向于编写一个 shell 脚本:stackoverflow.com/questions/4412238/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-10
  • 2014-12-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多