使用 nohup 命令可让程序在终端关闭后继续运行,1. 基本用法为 nohup command &,如 nohup python3 myscript.py &;2. 输出默认保存到 nohup.out,可通过 > app.log 2>&1 重定向至自定义日志文件;3. 程序需无需交互输入,否则可能卡住;4. 可通过 ps aux | grep 查看进程,kill pid 终止进程;5. nohup 不保证永久运行,系统重启或崩溃仍会中断程序;6. 如需实时查看输出,推荐使用 screen 或 tmux 替代。该方法简单有效,适合非交互式后台任务部署。

在 Linux 或类 Unix 系统中,当你通过终端运行一个程序时,如果关闭终端或网络断开(比如 SSH 断开),程序通常会被终止。为了防止这种情况,可以使用
nohup命令结合
&符号来让程序在后台持续运行,即使终端关闭也不会中断。
什么是 nohup
nohup(no hang up)命令的作用是让程序忽略挂起信号(SIGHUP),这样即使用户退出终端或断开连接,程序依然继续运行。
如何使用 nohup 后台运行程序
基本语法如下:
nohup command &
command
是你要运行的程序或脚本。nohup
让程序忽略终端关闭信号。&
表示将程序放到后台运行。
示例:运行一个 Python 脚本
nohup python3 myscript.py &
执行后你会看到类似输出:
[1] 12345 nohup: ignoring input and appending output to 'nohup.out'
[1] 12345
表示这是第一个后台任务,进程 ID 是 12345。- 输出默认会写入当前目录下的
nohup.out
文件。
重定向输出(可选但推荐)
默认情况下,
nohup会把标准输出和标准错误都追加到
nohup.out。如果你希望自定义日志文件,可以手动重定向:
nohup python3 myscript.py > app.log 2>&1 &
解释:
> app.log
:将标准输出重定向到app.log
2>&1
:将标准错误也重定向到标准输出(即同样写入app.log
)&
:后台运行
这样日志会保存在
app.log中,便于后续查看。
常见问题和注意事项
程序仍卡住?检查是否需要输入
nohup
会忽略输入,所以如果程序需要交互式输入,可能会卡住。确保程序可以无交互运行。-
如何查看和管理后台进程? 使用
ps
查看进程:ps aux | grep myscript.py
使用
kill
终止进程:kill 12345 # 替换为实际的 PID
关闭终端后进程仍在运行
这正是nohup
的目的。你可以重新登录后用ps
检查程序是否还在运行。nohup 不等于永久运行
它只是防止终端断开导致的中断。系统重启、程序崩溃、资源不足等情况仍可能导致程序停止。
小技巧:结合 screen 或 tmux 更灵活
虽然
nohup很实用,但如果你需要随时回到程序的输出界面(比如查看实时日志),建议使用
screen或
tmux,它们提供会话保持功能,比
nohup更灵活。
例如使用
screen:
screen -S mytask python3 myscript.py # 按 Ctrl+A, 再按 D 脱离会话
之后可以用
screen -r mytask重新连接。
基本上就这些。
nohup是最简单直接的方式,适合大多数后台运行场景,尤其适合部署脚本或服务时使用。关键是记得加上
&,并处理好输出重定向,避免日志混乱。










