新手教程:使用reptyr接管前台任务
编译了35% 一会要停电了!怎么能停止程序明天接着编译??
openEuler交流群的小伙伴提了这样一个问题。他用SSH连接服务器,开始编译之后才发现没有把任务跑在screen
或者tmux
中。有没有办法挽救呢?办法当然是有的。
TL;DR
reptyr 可以将运行中的程序重绑定到新的终端
reptyr目前不在openEuler仓库中。用户可到oepkgs软件仓库获取安装包。
暂停前台任务
(笔者懒得安装编译依赖了,此处以wget为例)
文件下载到一半,突然发现忘了开tmux怎么办?先按Ctrl Z
暂停任务。
此时前台任务就被暂停了。
安装reptyr
reptyr软件包目前不在openEuler仓库中。用户可以自行从源码编译安装,或从oepkgs软件仓库中获取安装包。本文介绍后者。
项目主页:GitHub - nelhage/reptyr: Reparent a running program to a new terminal
打开search.oepkgs.net,在搜索框内输入reptyr
,点击“搜索”或回车。
在搜索页面中找到适合自己系统的安装包。笔者的系统是 openEuler 22.03 LTS ,因此选择了下图中第三个搜索结果。点击“查看”可以看到这个软件包的详情。
可以参照详情页中的安装指引,添加源→安装软件包。对于reptyr这种依赖简单的包,也可以直接下载安装二进制包。本文介绍后者。
点击“复制下载地址”,回到SSH控制台,通过dnf
软件包管理器直接安装这个软件包。
用reptyr接管任务
如果之前没有安装过screen
或tmux
,也可在此时安装。本文以tmux为例。
使用jobs -l
命令可以查看之前暂停的任务的PID(本例中是2577)。记住这个数字。
在终端中输入tmux
打开一个新的tmux会话。
使用命令reptyr <PID>
即可在此处恢复任务。
同时按下Ctrl B
组合键,松手后再按D
,此时任务已在tmux会话中,并被置入后台运行。可放心关闭SSH终端。
再次打开SSH终端后,可以用tmux ls
命令查看之前创建的会话。图中的“0"是会话ID。
使用命令tmux attach -t <会话ID>
恢复tmux会话。从截图可以判断,当SSH会话断开后,wget下载任务仍在后台运行,并在下载完成后正常退出。
Ctrl D
可以退出tmux。