Linux后台跑程序的方法总结

当使用ssh进行远程代码运行时,控制端电脑通常不能出现任何意外。然而,运行深度学习程序通常需要数小时或数天的时间,这意味着我们的IDE不能关闭。一旦出现非人为因素(如断电、断网或IDE卡死关闭),远程程序也会中断。因此,将程序灵活地运行在服务器上,不受控制端因素的影响至关重要。

使用 & 将命令放到后台运行

第一种方法是在命令行最后加&符号  command & 

# 执行文件
python ./test.py &
 
# 查看是否在后台运行
ps -ef|grep test
 
# 后台的程序 需要关闭时,需要kill命令停止
killall [程序名]

注意:这种方法,查看运行日志很不方便(不推荐) 

nohup 命令

nohup 命令允许程序在退出终端后继续运行。输出会默认写到 nohup.out 文件中,或者你可以指定一个输出文件:

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

参数说明:

 python test.py  python 运行test.py文件

 -u  :表程序不启用缓存,也就是把输出直接放到log中,没这个参数的话,log文件的生成会有延迟

 >  :test.log 将输出日志保存到这个log中

 2>1 :2与>结合代表错误重定向,而1则代表错误重定向到一个文件1,而不代表标准输出;

 2>&1 :&与1结合就代表标准输出了

 &  :代表该命令在后台执行

查看nohup的后台进程:

jobs

disown 命令

如果你已经启动了一个前台任务,可以将其移到后台并使其在你退出终端后继续运行

command
# 按下 Ctrl+Z 暂停任务,这会将任务置于后台并暂停状态
bg  
disown -h

举个例子

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

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

[1]+  Stopped                 python myscript.py

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

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

[1]+ python myscript.py &

3. 使用 disown 移除作业

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

disown -h %1

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

disown 的选项

  • disown 默认情况下会从作业列表中移除指定的作业。
  • -h 选项会将作业标记为不发送 HUP 信号(挂起信号),即使终端关闭,作业也会继续运行。

检查后台任务

ps aux | grep myscript.py

screen

screen 和 tmux 是两个强大的终端复用器,允许你在会话中运行多个程序,并且可以在会话断开后重新连接。

创建一个新的窗口,[-S  test] 设置窗口名称

screen [-S test]

分离当前 screen 会话(让它在后台继续运行)

按 Ctrl + A 然后按 D,可以将当前会话分离,程序仍会在后台运行。

列出所有 screen 会话

screen -ls

重新连接 screen 会话

重新连接指定的会话:

screen -r session_name

如果有多个会话,可以使用会话编号:

screen -r 12345

终止 screen 会话

在 screen 中输入: exit 

如果在主终端中手动删除某个会话:

screen -X -S session_name quit

保存 screen 日志

screen -L -S session_name

这将会把 session 的日志保存到一个名为 screenlog.x 的文件中。

滚轮翻页

  1. 使用快捷键 [Ctrl + A] 然后按 [Esc] 进入滚动模式,按 q 退出滚动模式。
  2. 使用终端的滚动条:修改 screen 配置文件(通常是 ~/.screenrc/etc/screenrc),添加以下内容:
termcapinfo xterm* ti@:te@

 

常用快捷键总结

快捷键功能
Ctrl + AC 创建一个新窗口
Ctrl + AD 分离当前会话
Ctrl + AN 切换到下一个窗口
Ctrl + AP 切换到上一个窗口
Ctrl + A" 显示窗口列表
Ctrl + AK 杀死当前窗口
Ctrl + A? 显示帮助信息
Ctrl + D 退出screen会话

tmux

tmux 是一个终端复用器,可以在一个终端中开启多个会话(session),每个会话中可以有多个窗口(window)和面板(pane)。即使断开 SSH,tmux 会话也会继续运行。

# Ubuntu/Debian
sudo apt install tmux

# CentOS/RHEL
sudo yum install tmux

# macOS
brew install tmux

启动 tmux: tmux 

启动后进入 tmux 会话,屏幕底部会显示状态栏。

分离会话: Ctrl+b 然后按 d 

重新连接会话: tmux attach-session -t [会话名称] 

查看当前会话: tmux list-sessions 

退出 tmux: exit 

翻页: 使用鼠标滚动或按下 Ctrl + b 后再按 [PageUp] 查看滚动内容 


上面就已经够我们日常使用了,下面是一些进阶教程,如果想要一些高级操作,可以学学

新建窗口: Ctrl+b 然后按 c 

切换窗口

Ctrl+b 然后按 n  # 下一个窗口
Ctrl+b 然后按 p  # 上一个窗口
Ctrl+b 然后按 w  # 显示窗口列表,使用上下键选择

水平分割 Ctrl+b 然后按 " 

垂直分割: Ctrl+b 然后按 % 

切换面板: Ctrl+b 然后按方向键 

调整面板大小: Ctrl+b 然后按方向键 (按住方向键调整大小) 

命名会话: tmux new -s [会话名称] 

切换会话: Ctrl+b 然后按 s 

命名窗口: Ctrl+b 然后按 , (输入新名称并回车) 

保存和加载会话: tmux list-windows -t [会话名称] 

恢复会话布局: 使用第三方工具 tmux-resurrect,可以自动保存和恢复会话状态。

自定义配置

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

复制代码
# 设置前缀为 Ctrl+a
unbind C-b
set -g prefix C-a
bind C-a send-prefix

# 设置鼠标支持
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)'
复制代码

修改后,重新加载配置: tmux source-file ~/.tmux.conf 

常用快捷键汇总

操作快捷键
新建会话 tmux new -s
分离会话 Ctrl+b d
列出会话 tmux list-sessions
新建窗口 Ctrl+b c
关闭窗口 exit
水平分割面板 Ctrl+b "
垂直分割面板 Ctrl+b %
切换面板 Ctrl+b + 方向键
调整面板大小 Ctrl+b + 方向键
开启鼠标支持 在配置文件中设置

作者:凌逆战
欢迎任何形式的转载,但请务必注明出处。
限于本人水平,如果文章和代码有表述不当之处,还请不吝赐教。
本文章不做任何商业用途,仅作为自学所用,文章后面会有参考链接,我可能会复制原作者的话,如果介意,我会修改或者删除。

posted @   凌逆战  阅读(835)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
点击右上角即可分享
微信分享提示

目录导航