linux终端关闭,训练就停止怎么办?

在这里插入图片描述

挂起训练的方法

源于问题:要在 bash 中启动一个 .sh 脚本进行双卡训练,并确保关闭终端窗口后训练不被中断。

其实,挂起训练就可以,使用以下方法:


方法 1: 使用 nohup

nohup (No Hangup) 是 Linux 中一个实用程序,可以让程序在后台运行,即使终端被关闭,程序也会继续运行。

步骤

  1. 运行你的脚本:

    nohup bash your_script.sh > output.log 2>&1 &
    
    • nohup: 确保关闭终端后程序继续运行。
    • your_script.sh: 你的训练脚本。
    • output.log: 将程序的标准输出和错误输出重定向到 output.log 文件。

    • 2>&1: 将标准错误流(stderr)重定向到标准输出流(stdout)。
    • &: 将程序放到后台运行。
  2. 检查程序是否在后台运行:
    jobs

  3. 或者使用 ps 命令:

    ps aux | grep your_script.sh
    
  4. 退出终端后,程序仍会继续运行。


方法 2: 使用 tmux 或 screen

tmux 和 screen 是终端多路复用工具,可以让你在后台运行会话,并随时重新连接到会话。

使用 tmux

  1. 启动一个新会话:
    tmux new -s training
    
    • training: 新会话的名称。
  2. 在会话中运行你的脚本:
    bash your_script.sh
    
  3. 按下 Ctrl+B,然后按 D,会话会被分离,程序继续运行。
  4. 随时重新连接到会话:
    tmux attach -t training
    

使用 screen

  1. 启动一个新会话:

    screen -S training
    
  2. 在会话中运行你的脚本:

    bash your_script.sh
    
  3. 按下 Ctrl+A,然后按 D,会话会被分离,程序继续运行。

  4. 随时重新连接到会话:

    screen -r training
    

    如有多个:

    There are screens on:
    2152090.training (Detached)
    1390125.training (Detached)
    1389491.training (Detached)
    3 Sockets in /run/screen/S-dell.

    需要选定一个进入,如:

    screen -r 2152090
    
  5. 查看当前所有会话

    screen -ls
    
  6. 删除会话

    screen -S [PID] -X quit
    
  7. 把screen的Attached转为Detached

    screen -d 会话名
    

方法 3: 使用 disown

如果程序已经在运行,可以将它与当前终端分离。

  1. 将程序后台运行:
    bash your_script.sh &
    
  2. 查看作业编号:
    jobs
    
  3. 分离程序(假设作业编号为 1):
    disown %1
    
  4. 关闭终端后,程序仍然继续运行。

推荐方法

  • 初学者:使用 nohup 简单可靠。
  • 多任务管理:使用 tmux 或 screen,可以更方便地查看运行情况或恢复会话。