nohup
是 Linux 和类 Unix 系统中的一个命令,用于在后台运行程序,即使用户退出终端或断开会话,程序依然可以继续运行。nohup
全称是 "no hang up",意思是不挂起程序。
基本语法
1 | nohup 命令 [参数] & |
nohup
:表示忽略挂起信号(SIGHUP),防止程序因用户退出终端而终止。命令
:需要运行的程序或脚本。&
:将程序放到后台运行。
nohup
的作用
- 用于让程序在后台运行,即使用户退出终端,程序依然可以继续执行。
- 默认情况下,
nohup
会将程序的输出(标准输出和标准错误)重定向到文件nohup.out
,除非用户手动指定输出位置。
常用示例
后台运行一个程序
1 | nohup python3 script.py & |
- 含义:
nohup
确保script.py
即使用户退出终端也能继续运行。&
将程序放到后台运行。- 输出和错误信息会被默认保存到当前目录下的
nohup.out
文件中。
指定输出日志文件
1 | nohup python3 script.py > output.log 2>&1 & |
- 含义:
> output.log
:将标准输出重定向到output.log
文件。2>&1
:将标准错误重定向到标准输出(output.log
)。&
:将程序放到后台运行。
运行一个脚本
1 | nohup ./myscript.sh > myscript.log 2>&1 & |
- 将
myscript.sh
放到后台运行,输出内容保存到myscript.log
。
使用 nohup
配合其他命令
运行一个长期任务
1 | nohup tar -czf backup.tar.gz /data > backup.log 2>&1 & |
- 将
/data
目录打包为backup.tar.gz
,并在后台运行,输出保存到backup.log
文件中。
运行一个服务
1 | nohup java -jar myapp.jar > myapp.log 2>&1 & |
- 启动一个 Java 应用程序,将输出保存到
myapp.log
,即使终端关闭仍继续运行。
查看后台运行的任务
可以通过 jobs
或 ps
命令查看后台运行的任务。
-
查看当前会话的后台任务:
1
jobs
输出示例:
1
[1]+ Running nohup python3 script.py &
-
查看所有进程:
1
ps aux | grep script.py
终止后台任务
- 使用
ps
查找到进程的 PID,然后使用kill
终止:1
2ps aux | grep script.py
kill -9 <PID>
注意事项
-
默认输出文件是
nohup.out
:- 如果没有手动指定输出文件,
nohup
会将输出和错误信息保存到当前目录下的nohup.out
文件。 - 如果当前目录无写权限,
nohup
会将输出重定向到用户的主目录下的nohup.out
。
- 如果没有手动指定输出文件,
-
配合
&
使用:nohup
通常需要配合&
使用,才能将任务放到后台运行。- 如果没有加
&
,运行的程序不会自动进入后台,但仍然不会因终端关闭而终止。
-
与
cron
或at
结合:- 如果需要定时运行任务,可以将
nohup
和定时任务工具(如cron
)结合使用。
- 如果需要定时运行任务,可以将
总结
- 基本用法:
nohup 命令 &
:后台运行命令。nohup 命令 > output.log 2>&1 &
:后台运行命令,并指定日志文件。
- 适用场景:
- 长时间运行的任务(如备份、压缩、大型数据处理)。
- 启动服务或守护进程(如 Java 应用、HTTP 服务)。
- 熟练掌握
nohup
,可以让任务在后台稳定运行,避免因为退出终端导致任务中断。