当使用 SSH 进行远程代码运行时,控制端电脑通常不能出现任何意外。然而,运行深度学习等任务往往需要数小时甚至数天,这意味着我们不能随意关闭终端或 IDE。

一旦出现断电、断网、终端卡死等情况,远程任务也会被中断。

因此,将程序灵活、稳定地运行在服务器上,不受本地影响 就很重要。

1 & 后台运行(适合短任务)

在命令行最后加 &,可让任务在后台运行。但关闭终端后任务会结束,不适合长任务。

# 后台运行

python ./test.py &

# 查看进程

ps -ef | grep test.py

# 终止进程

killall python # 或 kill PID

⚠️ 缺点

终端关闭即结束任务

无法直接查看日志

仅适合临时运行

2 nohup(稳定的长任务运行)

nohup(no hang up)允许任务在退出终端后继续运行,并默认将输出写到 nohup.out 文件。

nohup python -u test.py > test.log 2>&1 &

参数说明:

-u:关闭输出缓存(日志实时写入)

> test.log:重定向标准输出到日志文件

2>&1:将标准错误(2)重定向到标准输出(1),这样两者都写入日志

&:后台运行

常用操作:

# 实时查看日志

tail -f test.log

# 查找进程

ps -ef | grep test.py

# 或

pgrep -af python

3 disown(补救已经启动的任务)

disown 可将当前 shell 中的任务移出作业控制,使其在退出终端后继续运行。

使用步骤:

# 启动任务(前台运行)

python myscript.py

# Ctrl+Z 暂停任务

bg # 让任务在后台运行

disown -h %1 # 使用 disown 移除作业,%1 为 jobs 列表中的作业号

ps aux | grep myscript.py # 检查后台任务

选项说明:

-h:阻止 shell 在退出时发送 HUP 信号

%1:作业号,通过 jobs 查看

⚠️ 注意

必须是当前 shell 已启动的任务

不能恢复终端输出,适合意外需要后台运行的情况

举个例子

启动一个前台任务python myscript.py

暂停任务并放到后台,按下 Ctrl+Z 暂停任务,这会将任务置于后台并暂停状态。你会看到类似如下的输出:

[1]+ Stopped python myscript.py

然后,使用bg命令将任务在后台继续运行:

这会继续执行任务,并且不会占用前台终端。你会看到类似如下的输出:

[1]+ python myscript.py &

使用 disown 移除作业

现在,使用 disown 命令将该作业从 shell 的作业列表中移除:

disown -h %1

这里的 %1 是作业号,如果你有多个作业,可以通过 jobs 命令查看作业列表,并确定正确的作业号。

disown 的选项

disown 默认情况下会从作业列表中移除指定的作业。

-h 选项会将作业标记为不发送 HUP 信号(挂起信号),即使终端关闭,作业也会继续运行。

检查后台任务

ps aux | grep myscript.py

4 screen(会话保持工具)

screen 是一个终端复用器,可以在断开 SSH 后保持任务运行,并可再次连接。

基本用法:

# 创建新会话

screen -S myjob

# 分离会话(后台运行)

Ctrl+A D

# 查看会话列表

screen -ls

# 重新连接会话

screen -r myjob

# 退出会话(在 screen 中输入)

exit

保存日志:

screen -L -S myjob

# 日志文件名为 screenlog.x

优缺点:

✅ 支持会话断开/恢复

✅ 可运行多个程序

❌ 功能相对简单,不如 tmux 灵活

滚轮翻页:

使用快捷键 [Ctrl + A] 然后按 [Esc] 进入滚动模式,按 q 退出滚动模式。

使用终端的滚动条:修改 screen 配置文件(通常是 ~/.screenrc 或 /etc/screenrc),添加以下内容:

termcapinfo xterm* ti@:te@

5 tmux(功能更强的终端复用器)

tmux 是目前最强的终端多路复用器之一,比 screen 功能更多、可扩展性更好。 它不仅能在 SSH 断开后保持任务运行,还能分屏、多会话、多窗口,并且有丰富的插件生态(如自动保存会话、同步输入等)。

tmux 的主要优点:

断线不中断任务 即便 SSH 断开,tmux 中的任务依然运行,可以随时重新连接。

多会话管理 一次登录可以开多个会话(session),每个会话独立运行多个窗口(window)。

分屏操作强大 水平/垂直分屏随意组合,提升并行操作效率。

高级自定义 可通过 .tmux.conf 自定义快捷键、状态栏、配色等。

插件生态丰富 配合 tpm(tmux plugin manager)可安装诸如 tmux-resurrect 这样的插件,实现会话状态自动保存和恢复。

5.1 安装

# Ubuntu/Debian

sudo apt install tmux

# CentOS/RHEL

sudo yum install tmux

# macOS

brew install tmux

5.2 基本用法

# 启动会话

tmux new -s myjob

# 分离会话

Ctrl+b d

# 查看会话

tmux ls

# 连接会话

tmux attach -t myjob

# 退出会话

exit

5.3 常用分屏操作

Ctrl+b " # 水平分割

Ctrl+b % # 垂直分割

Ctrl+b o # 在面板间切换

Ctrl+b 方向键 # 切换面板

Ctrl+b z # 放大/还原当前面板

5.4 建议配置

tmux 的配置文件位于 ~/.tmux.conf。以下是一个常用的配置示例:

# 设置鼠标支持

set -g mouse on

# 边框颜色

set -g pane-border-fg green

set -g pane-active-border-fg brightgreen

# 状态栏样式

set -g status-bg black

set -g status-fg white

set -g status-left '#[fg=green](#S)'

6 方法对比与推荐

方法

是否断开 SSH 继续运行

是否可重连

是否支持分屏

适用场景

&

临时短任务

nohup

长期任务,无需交互

disown

已启动任务补救

screen

多窗口运行,任务简单

tmux

高级多窗口,多任务管理

推荐:

长期、稳定运行:nohup / tmux

需要会话管理、多任务:tmux(比 screen 更强)

紧急补救任务:disown

Copyright © 2088 炼狱狂骨活动中心_暗黑风格游戏_装备掉落 All Rights Reserved.
友情链接