Files
obsidian-vault/06 平台与配置/怎么查看和处理linux服务器中的后台进程?.md
2026-06-23 00:24:32 +08:00

290 lines
8.8 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ubuntu #linux #软件配置 #DeepSeek #freqtrade
## 第一部分 如何将进程放在后台运行
在Linux服务器中将终端中正在运行的程序转入后台运行是常见的运维需求以下是多种可靠的方法及其详细操作步骤根据场景选择最合适的方案
---
### 🔧 **一、基础方法:`Ctrl+Z` + `bg`(临时切换)​**
**适用场景**​:前台程序需临时转入后台,但**终端关闭后进程会终止**。
1. **暂停前台程序**
- 程序运行时,按 `Ctrl+Z` 组合键,进程会暂停并显示作业号(如 `[1]+ Stopped ./your_command`[2,4](https://tencent.yuanbao/@ref)。
2. **转入后台继续运行**
- 执行 `bg %作业号`(如 `bg %1`),进程将在后台恢复运行[1,5](https://tencent.yuanbao/@ref)。
- 若省略作业号,默认操作最近暂停的进程。
3. **查看后台任务**
- `jobs -l` 显示当前终端的所有后台作业及PID[4](https://tencent.yuanbao/@ref)。
> ⚠️ **局限**​:终端关闭后进程终止,仅适合临时任务。
---
### 🔒 **二、持久化方案:脱离终端控制**
**适用场景**需终端关闭后进程仍持续运行如SSH断开场景
#### **1. `nohup` + `&`(推荐)​**
- **启动时直接后台运行**
```
nohup your_command > output.log 2>&1 &
```
- `nohup` 忽略SIGHUP信号避免终端关闭时进程终止[6,7](https://tencent.yuanbao/@ref)。
- `> output.log 2>&1` 将标准输出和错误重定向到文件(默认 `nohup.out`[3,8](https://tencent.yuanbao/@ref)。
#### **2. 对已运行进程:`disown`**
- 若程序已用 `&` 启动,先查作业号:
```
jobs -l # 记录作业号(如 %1
```
- 解除进程与终端的关联:
```
disown %1 # 或 disown -h %1 保留作业记录[3,7](@ref)
```
---
### 🖥️ **三、高级会话管理:`screen`/`tmux`**
**适用场景**​:需交互式操作或重新连接会话(如监控日志、调试)。
#### **1. `screen` 操作流程**
```
screen -S session_name # 创建会话
your_command # 在会话中运行程序
Ctrl+A → D # 分离会话(后台保持运行)
screen -r session_name # 重新连接会话[9,10](@ref)
```
#### **2. `tmux` 操作流程**
```
tmux new -s session_name # 新建会话
your_command # 运行程序
Ctrl+B → D # 分离会话
tmux attach -t session_name # 重新连接[10](@ref)
```
> ✅ **优势**​:支持多窗口、会话共享,断网后仍可恢复操作。
---
### ⚙️ **四、系统服务托管(`systemd`**
**适用场景**生产环境长期服务如Web服务器、数据库
1. 创建服务文件:
```
sudo nano /etc/systemd/system/your_service.service
```
2. 写入配置:
```
[Unit]
Description=Your Service
[Service]
ExecStart=/path/to/your_command
Restart=always
User=your_user
[Install]
WantedBy=multi-user.target
```
3. 启动并开机自启:
```
sudo systemctl daemon-reload
sudo systemctl start your_service
sudo systemctl enable your_service
```
- 日志通过 `journalctl -u your_service` 查看[7](https://tencent.yuanbao/@ref)。
---
### 💎 **方法对比与选择建议**
|**方法**|终端关闭后存活|日志管理|适用场景|
|---|---|---|---|
|`Ctrl+Z` + `bg`|❌|无|临时后台任务|
|`nohup`|✅|需重定向文件|非交互式长期任务|
|`disown`|✅|依赖启动时配置|已启动进程的持久化|
|`screen/tmux`|✅|可实时查看|需交互或重新连接的复杂任务|
|`systemd`|✅|系统统一管理|生产环境服务、开机自启|
---
### ⚠️ **关键注意事项**
1. **资源监控**
- 后台进程需定期检查资源占用:`top -p PID` 或 `htop`[7](https://tencent.yuanbao/@ref)。
2. **进程终止**
- 通过 `kill -9 PID` 强制终止(先 `ps aux | grep 进程名` 查PID[1,6](https://tencent.yuanbao/@ref)。
3. **输出处理**
- 无重定向时,`nohup` 默认输出到 `nohup.out`,需定期清理防止磁盘占满[7](https://tencent.yuanbao/@ref)。
4. **权限问题**
- `systemd` 服务需注意用户权限,避免因权限不足启动失败。
---
**总结**​:临时任务用 `Ctrl+Z + bg`,持久运行选 `nohup` 或 `disown`,交互任务用 `screen/tmux`,生产服务用 `systemd`。掌握这些方法,可灵活应对各类后台任务管理需求!
```bash
ps aux | grep "进程名或关键词"
```
---
## 第二部分 如何重新连接后台的进程
在Linux服务器中后台进程通常指通过`&`、`nohup`或终端复用工具(如`screen`/`tmux`)启动的进程。若需“进入”后台进程(如查看实时输出、交互操作或恢复会话),可通过以下方法实现:
### ⚙️ **一、通过终端复用工具重新连接会话**
适用于使用 **`screen`****`tmux`** 启动的后台进程。
1. **`screen` 会话恢复**
- 查看所有后台会话:
```
screen -ls
# 示例输出12345.session_name (Detached)
```
- 重新连接会话:
```
screen -r 12345 # 使用会话ID或名称
```
- 若会话被占用(状态为`Attached`),先强制断开再连接:
```
screen -d 12345 # 断开会话
screen -r 12345 # 重新连接
[1,5](@ref)
```
2. **`tmux` 会话恢复**
- 查看会话列表:
```
tmux list-sessions
# 示例输出session_name: 1 windows (created Tue Jul 2 14:00:00 2025)
```
- 连接指定会话:
```
tmux attach -t session_name
```
- 若需新窗口操作后返回原进程,按`Ctrl+B + D`分离会话[1,5](https://tencent.yuanbao/@ref)。
---
### 🔄 **二、将后台任务调入前台**
适用于通过 **`&`****`jobs`** 管理的后台任务(仅限当前终端会话有效)。
1. 查看当前终端后台任务列表:
```
jobs -l
# 输出示例:[1] 54321 Running python app.py &
```
2. 将任务调入前台:
```
fg %1 # %1 对应任务编号
```
3. 操作后需返回后台时:
- 按`Ctrl+Z`暂停任务
- 执行`bg %1`继续后台运行[1,5,9](https://tencent.yuanbao/@ref)。
---
### 📡 **三、通过管道查看实时输出**
适用于 **`nohup`** 启动的进程或需监控日志的场景。
1. 动态查看日志文件:
```
tail -f nohup.out # 默认输出文件
tail -f /path/to/app.log # 自定义日志路径
```
2. 若需交互(如输入命令),但进程未设计交互接口,此方法仅支持**只读查看**[1,6](https://tencent.yuanbao/@ref)。
---
### 🔍 **四、查找后台进程信息**
若不确定进程状态,先定位进程:
- **列出所有脱离终端的进程**
```
ps aux | grep -v 'TTY' | grep <进程名>
```
- **按名称查PID**
```
pgrep -l <进程名>
```
- **树形结构分析**
```
pstree -p | grep <进程名>
```
获取PID后结合前述方法操作[6,7,8](https://tencent.yuanbao/@ref)。
---
### 💎 **方法对比与适用场景**
|**方法**|**适用条件**|**能否交互**|**终端关闭后是否有效**|
|---|---|---|---|
|`screen`/`tmux`|启动时使用复用工具|✅ 支持|✅ 是|
|`fg`/`jobs`|当前终端启动的后台任务|✅ 支持|❌ 否(终端退出失效)|
|`tail -f`|任何写入日志的后台进程|❌ 只读|✅ 是|
---
### ⚠️ **注意事项**
1. **权限问题**
- 恢复`screen`/`tmux`会话需**同一用户**操作。
2. **进程状态**
- `STAT`列含`T`(停止状态)的进程需先用`bg`唤醒再操作[9,10](https://tencent.yuanbao/@ref)。
3. **生产环境建议**
- 长期服务推荐用**Systemd托管**​(通过`journalctl -u service名`查看日志),避免会话依赖[1,11](https://tencent.yuanbao/@ref)。
> 优先尝试 **`screen -r`****`tmux attach`**,若无效则通过日志监控(`tail -f`)或唤醒暂停任务(`bg + fg`)。日常运维中养成**使用终端复用工具**的习惯,可显著简化后台进程管理。
---
## 第三部分 ​进程终止:
通过 `kill -9 PID` 强制终止(先 `ps aux | grep 进程名` 查PID[1,6](https://tencent.yuanbao/@ref)。