首页 > 解决方案 > 如何使用 bash 杀死远程服务器上的多个进程

问题描述

我有这个非常简单的 bash 代码,它应该杀死tail -f远程服务器上的进程列表。

old_tailf_pids=`ssh root@$server "ps -ef | grep 'tail -f -n +1 /opt/wd' | grep root | grep -v grep | sed -e \"s@root *\([0-9]\+\) .*@\1@g\""`
echo $old_tailf_pids
echo "Killing old tailfs..."
ssh root@$server "kill -9 $old_tailf_pids"

输出:

4007 5281 5906 8265 8823 9918 10477 11587 12213 12753 13396 13976 14558 15985 16788 18128 18762 19412 20109 21393 28924 29487 31542 32155
Killing old tailfs...
bash: line 1: 5281: command not found
bash: line 2: 5906: command not found
bash: line 3: 8265: command not found
bash: line 4: 8823: command not found
bash: line 5: 9918: command not found
...

似乎 SSH 命令只杀死了第一个 pid,然后尝试“运行”其余的 pid。知道为什么吗?

谢谢

标签: bashssh

解决方案


从下面的评论中可以明显看出,变量在每个进程 id 之后包含换行符,您可以xargs在 remote 中使用此命令ssh

ssh root@$server "xargs kill -9 <<< \"old_tailf_pids\""

推荐阅读