nohup 是什么?
nohup 是 'No Hang Up' 的缩写,意味着它会忽略挂断信号(HUP 信号)并执行命令。通常,关闭终端窗口也会终止正在运行的程序,但使用 nohup 可以像盾牌一样阻止这种情况。
3 个核心概念
- 忽略 HUP 信号: 忽略用户登出时系统发送的终止信号(SIGHUP),使进程保持运行。
- nohup.out: 如果未指定单独的保存文件,执行结果(输出内容)将自动保存到 `nohup.out` 文件中。
- & (后台运行): 单独使用 nohup 会占用终端。通常在命令末尾加上 `&` 将其发送到后台。
主要语法和选项 (Shell)
nohup 本身没有复杂的选项。它通过结合**要执行的命令**和**重定向(指定输出方向)**来使用。
1. 基本执行配置
2. 日志(输出)管理
3. 帮助
生成的命令:
请尝试组合命令。
描述:
`nohup` 执行命令。
通过组合这些选项,您可以与 AI 一起虚拟地执行命令。
使用场景示例
实际工作中常用的 nohup 模式。
最基本的使用方法
nohup ./backup.sh &
在后台运行脚本。输出将累积在 `nohup.out` 中。
指定日志文件名(推荐)
nohup python3 app.py > my-app.log 2>&1 &
将日志保存到 `my-app.log` 而不是 `nohup.out`。`2>&1` 表示将错误消息也保存到同一个文件。
不保存日志运行
nohup ./heavy-task.sh > /dev/null 2>&1 &
当不需要输出内容或输出过多可能导致磁盘空间不足时,将输出丢弃到 `/dev/null`。
查找正在运行的 nohup 进程
ps -ef | grep app.py
使用 `ps` 命令查看正在运行的进程。
安装
nohup 是 'GNU Coreutils' 中包含的基本命令,几乎所有 Linux 发行版都已预装。
安装确认
大多数情况下无需单独安装。可以使用以下命令确认是否已安装。
查看版本
nohup --version
提示与注意事项
有用提示
- 已经运行的任务怎么办?: 如果忘记使用 nohup 而直接运行了任务,可以先用 `Ctrl+z` 暂停,然后用 `bg` 切换到后台,最后使用 `disown -h %1` 命令来达到 nohup 的效果。
- 终止方法: 通过 nohup 运行的进程无法用 `Ctrl+c` 终止。需要使用 `ps -ef | grep [名称]` 查找 PID(进程ID),然后用 `kill -9 [PID]` 命令终止。
- 注意磁盘空间: 长时间运行的程序如果持续向 `nohup.out` 写入日志,文件可能会变得巨大,导致服务器停止。请定期清空或使用 `/dev/null`。