【问题标题】:Kill a process from lsof after ssh在 ssh 之后从 lsof 杀死一个进程
【发布时间】:2018-06-13 04:17:58
【问题描述】:

我知道一个进程正在远程服务器的 5000 端口上运行。 如何在单行 cmd 中调用它?

我可以通过 ssh 连接到该服务器并执行 kill $(lsof -i:5000 -t)。它有效。

如果我这样做,从我的本地终端

ssh user@ip.ip.ip.ip "kill $(lsof -i:5000 -t)"

它给出了类似的错误

kill: usage: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]

【问题讨论】:

标签: bash ubuntu ssh quoting


【解决方案1】:

这是因为您的$(lsof -i:5000 -t) 命令是在本地而非远程解释的。只需使用简单的引号来防止局部扩展。或者,您也可以转义您不想在本地扩展的部分。

ssh user@ip.ip.ip.ip 'kill $(lsof -i:5000 -t)'
# or
ssh user@ip.ip.ip.ip "kill \$(lsof -i:5000 -t)"

基本上,ssh

  • 双引号和常规变量(即:$VAR):局部扩展
  • 单引号和转义变量(即:\$VAR):远程扩展

【讨论】:

    【解决方案2】:

    ssh 到系统并执行命令

     lsof -a +L1 | awk '$7 > 1073741824 && NR >1 {print $2}' | sort -nu | xargs kill
    

    它也会清除/释放其他阻塞的内存

    【讨论】:

    • 你能解释一下这个命令在做什么吗? awk 位有点晦涩。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-01
    • 1970-01-01
    • 2011-07-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多