通过查找进程 ID 通过 SSH 终止进程

通过查找进程 ID 通过 SSH 终止进程

我想编写一个脚本,让我通过向脚本输入命令来终止一个进程。

我已经完成了大部分工作,但我的问题是,目前我需要 ssh 两次才能杀死它 1)获取进程 ID 2)杀死该进程 - 我希望一次性完成这些工作,而且我尝试过管道,但似乎无法让它工作。

这是我当前的工作版本:

ProcessNumber=`ssh user1@server1 -p22222 ps -ef | awk '/[s]sh -f -N -T -R32400:localhost:32400 remote@remote/{print $2}'`
ssh user1@server1 -p22222 "kill $ProcessNumber"

这是我无法运行的一段脚本。

ssh user1@server1 -p22222 kill `ps -ef | awk "/[s]sh -f -N -T -R32400:localhost:32400 remote@remote/{print $2}"`

有什么建议可以让第二个一次性完成吗?

答案1

解析输出ps -ef有点棘手。我建议您pgrep使用

pgrep -f `ssh -f -N -T -R32400:localhost:32400 remote@remote`

或者直接用以下方法减少所有内容pkill

ssh user1@server1 -p22222 "pkill -f 'ssh -f -N -T -R32400:localhost:32400 remote@remote'"

答案2

类似下面这个丑陋的一行代码就可以做到这一点:

ssh user1@server1 -p22222 "kill \$(ps -ef | awk '/[s]sh -f -N -T -R32400:localhost:32400 remote@remote/{print \$2}')"

转义可能仍需要一些调整(没有测试)。

相关内容