把一个运行的进程放到 tmux 会话中¶
有的时候,我们启动一个需要长时间运行的进程时,可能忘记打开 tmux 。
但是程序已经在运行,如果中断程序,重新运行,可能需要做一些数据清理的工作。
是否有办法把一个当前正在运行的程序"挪进"到 tmux 会话里去呢?
还真有这样的工具,reptry 就可以做到这一点,而且该工具已经在很多系统的仓库里了,比如 CentOS 系列,就可以从 epel 仓库中获取
操作很简单,官方文档也有说明,简单描述如下:
-
假定你启动了一个运行在前台的服务,比如
top
命令 -
在当前运行进程上,按
CTRL-Z
将其转到后台
[1]+ 已停止 top
- 执行
bg
命令,让其在后台继续运行
$ bg
[1]+ top &
[1]+ 已停止 top
- 执行
disowner top
将该运行的服务与目前的终端断开,这样你执行jobs
命令是看不到有转后台的进程了,但是ps -a
还是能找到top
这个进程的 - 另开一个终端,开启 tmux,然后在 tmux 会话里,执行
reptyr <pid>
,其中<pid>
就是top
进程当前的进程ID - 现在你能看到
top
命令已经运行在当前 tmux 会话里了。