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
的文件中。
滚轮翻页:
- 使用快捷键 [Ctrl + A] 然后按 [Esc] 进入滚动模式,按 q 退出滚动模式。
- 使用终端的滚动条:修改
screen
配置文件(通常是~/.screenrc
或/etc/screenrc
),添加以下内容:
termcapinfo xterm* ti@:te@
常用快捷键总结
快捷键 | 功能 |
---|---|
Ctrl + A ,C |
创建一个新窗口 |
Ctrl + A ,D |
分离当前会话 |
Ctrl + A ,N |
切换到下一个窗口 |
Ctrl + A ,P |
切换到上一个窗口 |
Ctrl + A ," |
显示窗口列表 |
Ctrl + A ,K |
杀死当前窗口 |
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 + 方向键 |
开启鼠标支持 | 在配置文件中设置 |
作者:凌逆战
欢迎任何形式的转载,但请务必注明出处。
限于本人水平,如果文章和代码有表述不当之处,还请不吝赐教。
本文章不做任何商业用途,仅作为自学所用,文章后面会有参考链接,我可能会复制原作者的话,如果介意,我会修改或者删除。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?