在ssh之后杀死lsof的进程

时间:2018-01-03 13:20:43

标签: bash ubuntu ssh quoting

我知道进程正在远程服务器上的端口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]

2 个答案:

答案 0 :(得分:4)

这是因为您的$(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):远程扩展

答案 1 :(得分:-1)

ssh到系统并执行命令

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

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