nohup
是 Linux 中一个非常常用的命令,用于在后台运行进程并忽略挂起信号(SIGHUP),即使用户退出终端会话,进程也能继续运行。
常见用法
1. 基本用法:
nohup command &
- command:需要后台运行的命令。
- &:非必须,表示让命令在后台运行。
输出:默认会将输出重定向到当前目录下的 nohup.out 文件,如果没有权限,会输出到 /home/username/nohup.out。
如果你省略 &:
命令会在前台运行,并且屏幕仍然显示其输出内容。
即使关闭终端,进程依然会继续运行(nohup 的功能保证了这一点),但你不能在同一终端中继续输入其他命令,除非该命令完成。
2. 重定向输出:
nohup command > output.log 2>&1 &
- >:重定向标准输出。
- 2>&1:将标准错误输出重定向到标准输出。
3. 查看运行状态:
使用 ps 或 jobs 查看后台进程:
ps aux | grep command
根据jobs的特性,建议使用 grep 查询
jobs -l
//任务编号、状态、命令和进程 ID
注意:jobs 是一个 shell 内建命令,它只能显示当前 shell 会话中启动的后台任务(即:由当前 shell 直接管理的进程)。当终端关闭时,与该终端相关的 shell 会话会终止,jobs 无法再访问这些任务的信息。
4. 终止进程:
kill -9 <pid>
5. 结合 shell 脚本:
nohup ./script.sh > log.txt 2>&1 &
场景示例
运行一个长时间的程序:
nohup python long_script.py &
即使关闭终端,long_script.py 仍然会继续执行。
监控进程输出:
可以通过查看日志文件实时跟踪:
开启另一个终端
tail -f output.log