nohup 是 linux 中用于让程序在终端关闭后持续运行的轻量工具,通过忽略 sighup 信号并重定向 i/o 实现后台驻留,适用于无 systemd/screen 的环境及快速调试场景。

nohup 是 Linux 中让程序在终端关闭后仍持续运行的常用工具,核心作用是忽略 SIGHUP(挂起信号),同时自动将标准输出和标准错误重定向到 nohup.out 文件(除非另行指定)。
需要长时间运行且不依赖交互的场景
比如执行一个耗时的数据处理脚本、模型训练、文件批量转换或爬虫任务。这类任务不需要实时输入,但要求即使你关掉 SSH 连接或退出终端也不能中断。
- 直接运行:
nohup python train.py > train.log 2>&1 & - 加
&是为了放入后台;> train.log 2>&1把输出重定向到日志,避免默认的nohup.out混乱 - 不加
&的话,命令会前台运行(仍抗断连,但会卡住当前终端)
没有 systemd 或 screen/tmux 的轻量环境
在某些嵌入式设备、容器或最小化系统中,可能没装 systemd、screen 或 tmux。这时 nohup 是最简依赖、开箱即用的后台方案。
- 无需额外安装,bash/zsh 默认支持
- 适合写进一键启动脚本,比如部署时自动拉起服务:
nohup ./server --port=8080 > server.log 2>&1 & - 注意:它不提供进程管理能力(如重启、状态检查),仅解决“不随终端退出而终止”这一个问题
临时调试或快速验证后台行为
开发阶段想快速确认某程序能否真正脱离终端运行,nohup 比配置 service 文件或写守护进程快得多。
- 可配合
ps aux | grep xxx或jobs(仅限当前 shell 启动的)验证是否仍在运行 - 输出日志便于事后排查:
tail -f nohup.out或你指定的日志文件 - 注意:若程序本身会主动读取 stdin(比如等待用户输入),
nohup不会阻止它卡住,需额外加
与 & 和重定向配合使用的细节要点
nohup 本身不等于后台运行,必须和 & 搭配才能释放终端;输出重定向也建议显式指定,避免多个 nohup 命令挤在同一个 nohup.out 里。
- 推荐写法:
nohup command > out.log 2>&1 防止程序因尝试读 stdin 而阻塞- 如果日志路径含空格或特殊字符,记得用引号包裹整个重定向部分
- 退出前可记下 PID(如
echo $! > pidfile),方便后续 kill











