当前位置:首页>Linux>Linux 基础 | nohup 命令使用指南(远程不断线的核心工具)

Linux 基础 | nohup 命令使用指南(远程不断线的核心工具)

  • 2026-08-22 16:02:48
Linux 基础 | nohup 命令使用指南(远程不断线的核心工具)

你有没有遇到过这种情况:

远程登录服务器启动了一个程序

关闭终端后,程序直接停止

网络一断,任务就挂掉

如果你做过部署、训练模型、跑爬虫、执行批量任务,那你一定踩过这个坑。

今天我们讲清楚一个非常关键的命令:nohup。

一、nohup 是干什么的?

nohup 全称是:no hang up(不挂断)
它的核心作用是:让程序在终端关闭后继续运行。
在 Linux 中,当你关闭终端或 SSH 断开时,系统会向当前会话发送一个信号:
SIGHUP
默认情况下,进程收到这个信号就会终止。
而 nohup 的作用,就是让程序忽略这个信号。

二、最基础用法

普通运行:
python app.py
关闭终端,程序结束。
使用 nohup:
nohup python app.py
终端关闭后,程序仍然在后台运行。
默认会生成一个文件:nohup.out
所有输出都会写入这个文件。

三、后台运行(最常用写法)

实际生产中,通常会搭配 & 使用:
nohup python app.py &
解释:
nohup:忽略挂断信号
&:放到后台运行
执行后终端会返回一个进程号(PID)。

四、指定输出文件

默认输出到 nohup.out,但我们一般会手动指定日志文件。
nohup python app.py > app.log 2>&1 &
这里有三个关键点:

> 重定向标准输出

2>&1 把错误输出也重定向到同一个文件

& 后台执行

这是线上最标准写法。

五、查看进程是否运行

可以使用:
ps -ef | grep app.py
或者:
top
如果还能看到进程,说明 nohup 生效。

六、停止后台程序

找到 PID 后执行:
kill 进程号
例如:
kill 12345
如果进程无法正常退出:
kill -9 12345

七、典型使用场景

场景 1:启动 Web 服务
nohup java -jar app.jar > app.log 2>&1 &
用于部署 Spring Boot 应用。
场景 2:跑数据处理脚本
nohup python process.py > process.log 2>&1 &
适合长时间计算任务。
场景 3:训练模型
nohup python train.py > train.log 2>&1 &
训练往往耗时数小时甚至数天,必须保证不断线。

八、nohup 的底层原理

从进程模型来看:
  • 终端关闭 → 发送 SIGHUP
  • 默认行为 → 进程终止
  • nohup → 忽略 SIGHUP 信号
你可以理解为:nohup 改变了进程对信号的处理方式。
可以使用:
type nohup
查看它是否为外部命令。

九、nohup vs & 的区别

很多新手会混淆:
command &
和:
nohup command &
区别在于:
  • & 只是放到后台
  • nohup 是忽略挂断信号
  • 如果只用 &,关闭终端程序仍然会结束。

十、进阶建议:更专业的方式

在生产环境中,推荐使用:
systemd
supervisor
screen
tmux
这些工具比 nohup 更强大,可以实现会话恢复、进程守护。
但在日常运维中,nohup 依然是最轻量、最快速的解决方案。

总结

关于 nohup,你需要掌握:
它解决的是“终端关闭导致程序退出”的问题
常用写法:nohup command > log 2>&1 &
用 ps / top 查看进程
用 kill 终止进程
如果你经常远程操作服务器,nohup 是必须掌握的基础命令。
在 Linux 体系里,它属于:运维必备生存技能。
下一篇我们继续讲 Linux 实战命令。
如果这篇对你有帮助,欢迎点赞、收藏、转发。

最新文章

随机文章