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

8.8 KiB
Raw Permalink Blame History

#ubuntu #linux #软件配置 #DeepSeek #freqtrade

第一部分 如何将进程放在后台运行

在Linux服务器中将终端中正在运行的程序转入后台运行是常见的运维需求以下是多种可靠的方法及其详细操作步骤根据场景选择最合适的方案


🔧 一、基础方法:Ctrl+Z + bg(临时切换)​

适用场景​:前台程序需临时转入后台,但终端关闭后进程会终止

  1. 暂停前台程序
    • 程序运行时,按 Ctrl+Z 组合键,进程会暂停并显示作业号(如 [1]+ Stopped ./your_command2,4
  2. 转入后台继续运行
    • 执行 bg %作业号(如 bg %1),进程将在后台恢复运行1,5
    • 若省略作业号,默认操作最近暂停的进程。
  3. 查看后台任务
    • jobs -l 显示当前终端的所有后台作业及PID4

⚠️ 局限​:终端关闭后进程终止,仅适合临时任务。


🔒 二、持久化方案:脱离终端控制

适用场景需终端关闭后进程仍持续运行如SSH断开场景

1. nohup + &(推荐)​

  • 启动时直接后台运行

    nohup your_command > output.log 2>&1 &
    
    • nohup 忽略SIGHUP信号避免终端关闭时进程终止6,7
    • > output.log 2>&1 将标准输出和错误重定向到文件(默认 nohup.out3,8

**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

💎 方法对比与选择建议

方法 终端关闭后存活 日志管理 适用场景
Ctrl+Z + bg 临时后台任务
nohup 需重定向文件 非交互式长期任务
disown 依赖启动时配置 已启动进程的持久化
screen/tmux 可实时查看 需交互或重新连接的复杂任务
systemd 系统统一管理 生产环境服务、开机自启

⚠️ 关键注意事项

  1. 资源监控
    • 后台进程需定期检查资源占用:top -p PIDhtop7
  2. 进程终止
    • 通过 kill -9 PID 强制终止(先 ps aux | grep 进程名 查PID1,6
  3. 输出处理
    • 无重定向时,nohup 默认输出到 nohup.out,需定期清理防止磁盘占满7
  4. 权限问题
    • systemd 服务需注意用户权限,避免因权限不足启动失败。

总结​:临时任务用 Ctrl+Z + bg,持久运行选 nohupdisown,交互任务用 screen/tmux,生产服务用 systemd。掌握这些方法,可灵活应对各类后台任务管理需求!

ps aux | grep "进程名或关键词"

第二部分 如何重新连接后台的进程

在Linux服务器中后台进程通常指通过&nohup或终端复用工具(如screen/tmux)启动的进程。若需“进入”后台进程(如查看实时输出、交互操作或恢复会话),可通过以下方法实现:

⚙️ 一、通过终端复用工具重新连接会话

适用于使用 **screentmux** 启动的后台进程。

  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


🔄 二、将后台任务调入前台

适用于通过 **&jobs** 管理的后台任务(仅限当前终端会话有效)。

  1. 查看当前终端后台任务列表:

    jobs -l
    # 输出示例:[1] 54321 Running python app.py &
    
  2. 将任务调入前台:

    fg %1  # %1 对应任务编号
    
  3. 操作后需返回后台时:

    • Ctrl+Z暂停任务
    • 执行bg %1继续后台运行1,5,9

📡 三、通过管道查看实时输出

适用于 **nohup** 启动的进程或需监控日志的场景。

  1. 动态查看日志文件:

    tail -f nohup.out        # 默认输出文件
    tail -f /path/to/app.log # 自定义日志路径
    
  2. 若需交互(如输入命令),但进程未设计交互接口,此方法仅支持只读查看1,6


🔍 四、查找后台进程信息

若不确定进程状态,先定位进程:

  • 列出所有脱离终端的进程

    ps aux | grep -v 'TTY' | grep <进程名>
    
  • 按名称查PID

    pgrep -l <进程名>
    
  • 树形结构分析

    pstree -p | grep <进程名>
    

    获取PID后结合前述方法操作6,7,8


💎 方法对比与适用场景

方法 适用条件 能否交互 终端关闭后是否有效
screen/tmux 启动时使用复用工具 支持
fg/jobs 当前终端启动的后台任务 支持 否(终端退出失效)
tail -f 任何写入日志的后台进程 只读

⚠️ 注意事项

  1. 权限问题
    • 恢复screen/tmux会话需同一用户操作。
  2. 进程状态
    • STAT列含T(停止状态)的进程需先用bg唤醒再操作9,10
  3. 生产环境建议
    • 长期服务推荐用Systemd托管​(通过journalctl -u service名查看日志),避免会话依赖1,11

优先尝试 **screen -rtmux attach,若无效则通过日志监控(tail -f)或唤醒暂停任务(bg + fg)。日常运维中养成使用终端复用工具**的习惯,可显著简化后台进程管理。


第三部分 ​进程终止:

通过 kill -9 PID 强制终止(先 ps aux | grep 进程名 查PID1,6