如何使用bash杀死远程服务器上的多个进程

时间:2018-08-19 10:31:52

标签: bash ssh

我有一个非常简单的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。知道为什么吗?

谢谢

1 个答案:

答案 0 :(得分:1)

从问题下方的注释中可以明显看出,变量在每个进程ID之后都包含换行符,您可以在远程xargs中使用此ssh命令:

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