bash - 如何使用 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。知道为什么吗?
谢谢
解决方案
从下面的评论中可以明显看出,变量在每个进程 id 之后包含换行符,您可以xargs
在 remote 中使用此命令ssh
:
ssh root@$server "xargs kill -9 <<< \"old_tailf_pids\""
推荐阅读
- javascript - 合并两个对象而不覆盖相同的属性
- javascript - 如何计算 div 标签内的文本行数
- python - 如何检查某人是否有管理员权限 on_message discord.py
- mysql - 哪个 AWS 服务用于我的大型 MySQL 表?
- sql - 如何使用正则表达式作为 CSV 分隔符创建将 CSV 值转换为表格的函数?
- c - 尝试查找复数的绝对值时输出错误,始终为 1
- python - 为任何 n 值扩展 (x+y)**n 二项式
- logstash - 如何在 Logstash 中将 JSON 对象转换为 STRING?
- .net - Blazor 中的 RazorComponent 多次包含在同一页面共享代码中
- c# - 在 VS10 .NET 表单中获取自定义控件的 IDesignerHost 时出现问题