本篇来由是因为我在甲骨文的arm64实例上训练一个模型,结果跑了2小时后发现忘记开screen了。所以问题就变成如何将一个运行中的进程移动到screen当中。
有一个工具reptyr可以实现这个功能。
下面是具体用法,以x86架构的Ubuntu为例(文末会提到如何在arm64下安装)。
# 安装reptyr
sudo apt install -y reptyr
# 切换到进行运行的终端窗口
# 1. 将进程挂起
ctrl+z
# 2. 将进程放到后台运行(如果只有一个进程,1可以省略)
bg 1
# 3. 解除从属关系(如果只有一个进程,1可以省略)
disown -h 1
# 4. 开启一个新的screen,<screen_name>使用一个实际名称替代
screen -S <screen_name>
# 5. 查看进程pid(根据具体情况三选一)
ps -ef|grep <name>
# 或者
top
# 或者
ps aux
#6. 将进程移到该screen
reptyr <pid>
如果提示权限不足:#Unable to attach to pid <xxxx>: Operation not permitted,那就加上sudo
sudo reptyr <pid>
Note:
fg
命令可以将后台进程重新放到前台。disown
如果不加参数-h
,使用jobs
会找不到这个进程,此时fg
命令也会无效。
arm64 安装 reptyr
- 克隆reptyr仓库
git clone https://github.com/nelhage/reptyr.git
- 直接编译(需要安装gcc),然后复制到
/usr/bin
里面
cd reptyr
make all
sudo cp ./reptyr /usr/bin