新手教程:使用reptyr接管前台任务

新手教程:使用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接管任务

如果之前没有安装过screentmux,也可在此时安装。本文以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。

2 个赞

:+1: :+1: :+1:

:100: :+1:

:100: :+1:

cool

这个太好了。之前执行长时间任务都要开screen,有时忘记就很头疼