跳转至

把一个运行的进程放到 tmux 会话中

有的时候,我们启动一个需要长时间运行的进程时,可能忘记打开 tmux

但是程序已经在运行,如果中断程序,重新运行,可能需要做一些数据清理的工作。

是否有办法把一个当前正在运行的程序"挪进"到 tmux 会话里去呢?

还真有这样的工具,reptry 就可以做到这一点,而且该工具已经在很多系统的仓库里了,比如 CentOS 系列,就可以从 epel 仓库中获取

操作很简单,官方文档也有说明,简单描述如下:

  1. 假定你启动了一个运行在前台的服务,比如 top 命令

  2. 在当前运行进程上,按 CTRL-Z 将其转到后台

[1]+ 已停止 top

  1. 执行 bg 命令,让其在后台继续运行
$ bg
[1]+ top &
[1]+  已停止               top
  1. 执行 disowner top 将该运行的服务与目前的终端断开,这样你执行 jobs 命令是看不到有转后台的进程了,但是 ps -a 还是能找到 top 这个进程的
  2. 另开一个终端,开启 tmux,然后在 tmux 会话里,执行 reptyr <pid> ,其中 <pid> 就是 top进程当前的进程ID
  3. 现在你能看到 top 命令已经运行在当前 tmux 会话里了。