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

如何通过SSH让远程服务器执行带输入的后台任务并即时退出?

SSH启动后台进程后无法立即退出的解决方法

问题原因

你执行的命令中,sleep 100 &虽被放到后台,但它仍继承了SSH会话的标准输入、输出、错误文件描述符。SSH会等待所有关联的文件描述符关闭后才断开连接,因此会一直等待100秒直到sleep进程结束。

可行解决方案

  • 重定向后台进程所有文件描述符:将后台进程的输入、输出、错误全部定向到/dev/null,彻底切断和SSH会话的关联

    echo Hello | ssh user@host "cat > /tmp/foo.txt; sleep 100 > /dev/null 2>&1 < /dev/null &"
    
  • 使用nohup工具:nohup能让进程脱离终端控制,默认将输出写入nohup.out,也可结合重定向避免生成日志文件

    # 保留nohup日志
    echo Hello | ssh user@host "cat > /tmp/foo.txt; nohup sleep 100 &"
    
    # 禁用nohup日志
    echo Hello | ssh user@host "cat > /tmp/foo.txt; nohup sleep 100 > /dev/null 2>&1 &"
    
  • 使用disown命令:在后台进程启动后,用disown将其从当前Shell作业列表中移除,SSH会话就不会再等待该进程

    echo Hello | ssh user@host "cat > /tmp/foo.txt; sleep 100 & disown"
    

验证方式

执行修改后的命令后,SSH会立即退出。你可以通过以下命令确认后台进程是否在远程服务器正常运行:

ssh user@host ps aux | grep sleep

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 12:54:17