如何通过SSH远程启动GUI程序并断开连接后维持其运行?
解决SSH远程启动GUI程序后自动断开会话的问题
你的问题出在nohup的输出没有完全隔离,导致SSH会话仍在等待后台进程的输出,无法自动退出。以下是几种可行的解决方法:
方法1:重定向nohup输出到/dev/null
直接将程序的标准输出和错误输出都丢弃,彻底切断与SSH会话的输出关联,命令如下:
ssh pi@192.168.64.129 "cd /home/pi/ISKRA; DISPLAY=:0 nohup ./GUI.py > /dev/null 2>&1 &"
> /dev/null:将程序的标准输出(stdout)导向空设备(丢弃)2>&1:将错误输出(stderr)重定向到标准输出的目标,也就是一起丢弃- 这样SSH会在命令执行后立即断开,程序在远程主机后台持续运行
方法2:结合disown彻底脱离Shell控制
如果担心Shell退出时给进程发终止信号,可以加上disown命令:
ssh pi@192.168.64.129 "cd /home/pi/ISKRA; DISPLAY=:0 nohup ./GUI.py > /dev/null 2>&1 & disown"
disown会把后台进程从当前Shell的作业列表中移除,Shell退出时不会发送SIGHUP信号,进一步保障进程存活。
方法3:使用screen/tmux(适合需要后续管理的场景)
如果远程主机安装了screen或tmux,可以创建后台会话运行程序,后续还能重新连接查看状态:
用screen的命令:
ssh pi@192.168.64.129 "screen -dmS gui_session bash -c 'cd /home/pi/ISKRA; DISPLAY=:0 ./GUI.py'"
screen -dmS gui_session:创建名为gui_session的后台screen会话- 后续要查看程序输出或操作,可执行
ssh pi@192.168.64.129 screen -r gui_session
额外注意事项
- 确保
./GUI.py有可执行权限,若没有,将命令中的./GUI.py替换为python3 GUI.py或python GUI.py(根据远程主机的Python版本) - 确认远程主机的桌面环境已启动,
DISPLAY=:0对应远程主机的本地显示器,若要在本地显示GUI需配置X11转发,但你需求是远程主机运行,所以无需额外配置X11转发
内容的提问来源于stack exchange,提问作者eSlavko
相关产品推荐
相关产品推荐

