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