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

SSH远程执行后台命令无效求助:nohup与&为何无法让sleep 10立即返回?

解决SSH远程执行后台命令无法立即返回的问题

我明白你遇到的麻烦——本地用bash -c "nohup sleep 10 2> /dev/null &"能立刻返回,但通过SSH远程执行就非得等10秒才结束,这确实挺恼人的。

问题根源其实在SSH会话的特性:SSH会一直保持连接,直到远程端所有关联的进程关闭了所有和会话绑定的文件描述符(stdout、stderr这些)。你单独用nohup sleep 10 2> /dev/null &时,虽然重定向了stderr,但stdout还是默认关联着SSH的会话通道,所以SSH会等着这个流关闭才断开。

给你几个靠谱的解决思路:

1. 彻底重定向所有输出流

把stdout和stderr都重定向到/dev/null,让SSH没有需要等待的流:

ssh localhost 'nohup sleep 10 > /dev/null 2>&1 &'

这里> /dev/null是把标准输出扔去黑洞,2>&1是把标准错误也重定向到和标准输出一样的地方,这样所有输出都和SSH会话解绑了,命令就能立刻返回。

2. 搭配disown命令脱离shell作业列表

有时候即使重定向了输出,远程shell还是会把后台进程当作自己的作业,退出时会等待。这时候可以用disown把进程从作业列表里移除:

ssh localhost 'nohup sleep 10 > /dev/null 2>&1 & disown'

disown会告诉远程shell:这个后台进程和我没关系了,你退出不用等它。

3. 用screen/tmux后台托管进程(适合需要后续查看的场景)

如果之后还想查看这个进程的状态或者输出,可以用screen或者tmux创建一个后台会话:

ssh localhost 'screen -dmS sleep_task sleep 10'

-dmS参数是让screen在后台启动一个名为sleep_task的会话,执行sleep 10,SSH执行完就立刻断开,进程在screen里独立运行。

试一下第一种方法应该就能解决你的问题啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 11:13:13