You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

退出SSH会话后,如何让远程机器的iperf在bash脚本中持续运行

解决SSH远程启动iperf后登出进程终止的问题

嘿,我来帮你搞定这个困扰!你遇到的核心问题是:SSH会话结束时会给远程机器上的子进程发送SIGHUP信号,而你原来的脚本写法并没有让iperf真正脱离SSH会话的控制,所以登出后进程就跟着终止了。

先说说你原脚本的问题

你写的这段代码:

ssh root@10.101.10.35 &>/dev/null & << EOF
nohup iperf -s -B 192.168.99.1 &>/dev/null &
EOF

这里的here-doc写法没有正确把命令传递给远程执行,而且即使传递成功,SSH会话的控制关系也没切断——当SSH进程结束时,远程的iperf进程还是会收到终止信号。

几种靠谱的解决方法

方法1:正确使用SSH + nohup

把远程要执行的命令直接作为SSH的参数,让nohup在远程机器上完全接管进程:

ssh root@10.101.10.35 "nohup iperf -s -B 192.168.99.1 &>/dev/null &"
  • nohup 会让iperf忽略SIGHUP信号,避免SSH会话结束时被终止
  • &>/dev/null 把标准输出和错误输出都重定向到/dev/null,防止生成nohup.out文件
  • 最后的& 让iperf在远程后台运行

方法2:用setsid创建独立会话

如果nohup还是不生效,可以试试setsid,它会给iperf创建一个全新的会话,彻底脱离SSH的会话组:

ssh root@10.101.10.35 "setsid iperf -s -B 192.168.99.1 &>/dev/null"

这种方式不需要加最后的&,因为setsid已经让进程在独立后台运行了。

方法3:用screen/tmux持久化会话(适合需要后续查看的场景)

如果你之后还需要连接到远程机器查看iperf的运行状态,screen或tmux是更好的选择:

# 使用screen
ssh root@10.101.10.35 "screen -dmS iperf_server iperf -s -B 192.168.99.1"

之后想要重新查看会话,可以执行:

ssh root@10.101.10.35 "screen -r iperf_server"

-dmS参数表示在后台启动一个名为iperf_server的screen会话,运行iperf服务,即使SSH登出,screen里的进程也会继续运行。

验证方法

执行完命令后,你可以登出SSH,然后重新登录远程机器,用ps aux | grep iperf看看进程是否还在运行。

内容的提问来源于stack exchange,提问作者Giannis Pappas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:28:32