reptyr 使用指南
reptyr 是一个把已经在运行的程序重新挂到当前终端的工具。最常见的场景是 SSH 连上服务器后启动了一个长任务,结果终端马上要断开,这时可以把它接到新的 tmux 或 screen 会话里继续跑。
1. 安装
Ubuntu / Debian 下直接安装:
|
|
2. 使用
reptyr 基本的命令是reptyr <pid>, 它会把目标进程的输入输出接到当前终端, 其典型的用途有两个:
- 在普通 SSH 终端里启动了长任务,想把它挂到
tmux/screen - 一个进程已经跑起来了,但希望切到另一个终端继续交互
示例流程如下:
|
|
接管完成后,这个进程就会从新的终端读输入、往新的终端写输出,Ctrl+C、Ctrl+Z 这类信号也会跟过去。
3. 常见问题
3.1 ptrace_scope 限制
reptyr 依赖 ptrace。Ubuntu Maverick 及之后的系统,默认可能会限制 ptrace。
官方 README 给的临时处理方式是:
|
|
这个修改是临时的。长期配置需要看系统里的 /etc/sysctl.d/10-ptrace.conf。
!!另外docker 里默认也限制了 ptrace,所以如果在容器里用 reptyr 需要启动docker时额外配置。
3.2 平台支持有限
官方 README 里明确写到:
reptyr支持 Linux 和 FreeBSD- FreeBSD 上不是所有功能都完整可用
3.3 Shell 作业状态不会完全同步
README 里还提到一个限制:
- 进程接到新终端以后,旧 shell 的作业状态不会自动变干净
- 如果后续还在旧终端里处理前后台,可能还得手动
bg或fg