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

如何在SSH连接断开后终止Raspberry Pi上已启动的程序?

解决SSH断开时自动终止Raspberry Pi上的程序

核心原因

你遇到的问题是因为默认情况下,当SSH会话没有绑定伪终端(TTY)时,远程启动的进程在SSH断开后会被系统的init进程接管,变成孤儿进程继续运行。要让进程随SSH会话一起终止,关键是让进程和SSH会话的终端绑定,这样会话断开时进程会收到SIGHUP信号并终止。

解决方案:给SSH命令添加-t参数

最简单有效的方法是在你的SSH命令中加上-t选项,强制分配伪终端。这样远程运行的Python程序会和这个终端绑定,当SSH连接断开(xterm关闭)时,终端被销毁,进程会收到SIGHUP信号,默认情况下Python程序会自动终止。

修改后的bash脚本如下:

#!/usr/bin/bash -f
xterm -title "Pi1" -hold -e ssh -t -i $HOME/.ssh/key_rsa "pi@192.168.0.107" "python3 collpre.py" &
xterm -title "Pi2" -hold -e ssh -t -i $HOME/.ssh/key_rsa "pi@192.168.0.108" "python3 test.py"

额外补充

  • -t参数的作用:强制SSH分配一个伪终端,即使当前输入不是终端(这里xterm提供了终端环境,但显式指定-t能确保远程进程和终端强绑定)。
  • 如果你的Python程序有自定义信号处理逻辑、忽略了SIGHUP,可以在远程命令中显式捕获并终止进程,比如:
    ssh -t -i $HOME/.ssh/key_rsa "pi@192.168.0.107" "trap 'kill %1' SIGHUP; python3 collpre.py"
    
    这个命令会在收到SIGHUP时杀死后台的Python进程,不过对于直接运行的前台进程,-t参数通常已经足够满足需求。

内容的提问来源于stack exchange,提问作者Alfred Wächter

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 09:38:19