关掉终端后任务仍能运行的关键是避免接收sighup信号或被终端父进程终止;nohup command &是最简可靠方案,需注意重定向顺序、输出路径及末尾空格;已启动的前台任务可用ctrl+z→bg→disown补救;交互类长期任务推荐screen/tmux;系统级服务应使用systemd用户服务。

关掉终端后任务还能活,关键不是“放后台”,而是“不收 SIGHUP 信号”或“不被终端父进程连带杀死”。
nohup command & 是最简可靠起点
它让命令忽略挂起信号,并自动把输出写进 nohup.out(当前目录下),适合一次性、非交互类任务。
-
nohup python3 app.py &:最简写法,输出默认进nohup.out -
nohup ./server.sh > server.log 2>&1 &:显式重定向,2>&1必须写在>后面,否则错误仍打屏 - 若当前目录不可写,
nohup会退到$HOME/nohup.out;两者都失败时,命令直接不执行 -
&一定要放在整条命令末尾,写成nohup cmd &,不是nohup cmd&(空格不能省)
已启动的前台程序怎么补救?用 disown
你已经敲了 python3 task.py,还没加 & 或 nohup,但又不想 Ctrl+C 重来——可以抢救。
- 先按
Ctrl+Z暂停它,此时变成 “stopped” 状态 - 运行
bg把它切到后台继续跑 - 再运行
jobs确认作业号(比如显示[1] + running python3 task.py &) - 执行
disown %1(%1是作业号),它就从 shell 的作业表里移除了
之后关终端,进程不再收 SIGHUP,能继续活。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
需要交互或长期维护?选 screen 或 tmux
适合要随时看日志、按 Ctrl+C 中断、甚至临时敲几行命令的场景,本质是换了个“不会死”的终端容器。
-
screen -S myapp启动命名会话,然后运行你的程序;按Ctrl+A再按D分离;恢复用screen -r myapp -
tmux new-session -d -s mytask可直接后台启动(适合脚本调用);恢复用tmux attach-session -t mytask -
screen在 Alpine 等精简系统里默认没装;tmux依赖ncurses,两者都不是“开箱即用”
长期服务别硬扛,该上 systemd 用户服务
如果任务要开机自启、崩溃自动重启、按需启停,nohup 和 screen 都只是临时方案。
- 用户级 service 文件放在
$HOME/.config/systemd/user/下,用systemctl --user daemon-reload加载 - 启用并启动:
systemctl --user enable --now myapp.service - 日志统一走
journalctl --user -u myapp,不用自己管文件轮转或权限 - 注意:
systemd --user默认可能未激活,需确认loginctl show-user $USER | grep -q "Linger=yes",否则得先sudo loginctl enable-linger $USER
真正容易被忽略的是:所有方案都依赖「进程是否脱离终端会话控制」这个底层逻辑,而不是表面的“后台”或“不关”。& 单独用不行,nohup 不加 & 会卡住终端,disown 前忘了 bg 就白忙——顺序和组合才是关键。










