如何把 执行中的命令挪到 Tmux 进程 

Tmux 是一个终端复用器(terminal multiplexer),非常有用,属于常用的开发工具。
之前使用的是 GNU Screen ,因为 screen 容易拼写,也是只知道这个软件可以实现进程的保持和保存。后来遇到一个文章介绍 Tmux ,说 tmux 比 screen 更新、更强大,所以就切到了 tmux 。
前段时间执行 docker pull 命令的时候网速非常慢,想结束但又不忍心已经运行了这么长时间,就只能忍痛 Ctrl + C 结束掉,再打开 tmux ,重新执行命令。
现在有个软件可以解决这个问题,新找的软件名字比较不熟悉,建议先 Ctrl + D 收藏一下本页面。
该软件的名字是 reptyr ,GitHub 开源软件。Ubuntu/Debian 系统可以直接安装。
sudo apt install reptyr 
等待长时间运行的进程中,
1、先使用快捷键 Ctrl + Z ,把现在运行的进程隐藏到后台。
2、输入命令 bg ,让隐藏到后台的进程机械运行。
3、输入命令 jobs -l ,显示运行中的后台进程。 -l 参数让你能够看到对应进程的 PID 。运行结果应该像这样:
4、输入命令 disown top ,我实例用的是 top 程序,修改成自己要修改的程序,会在上面第 3 步中显示你隐藏的程序。
5、打开你的 tmux  。
6、输入命令 reptyr 1122323 ,1122323 是刚才隐藏到后台程序的 PID 。
7、输入命令 Ctrl + B D ,脱离当前的 tmux 进程。
8、关闭 ssh 或者做其他的事情。
在第 6 步中可能会遇到错误,如图
Unable to attach to pid 1121531: Operation not permitted
The kernel denied permission while attaching. If your uid matches
the target's, check the value of /proc/sys/kernel/yama/ptrace_scope.
For more information, see /etc/sysctl.d/10-ptrace.conf
原因是这样的,reptyr 使用 ptrace 系统接口,这个接口本来是用来调试系统的。
为了防止没有权限的用户把进程添加到其他其他进程,linux 核心 kernel 设计了一个“ptrace scoping”参数限制用户和进程添加到其他进程。
/proc/sys/kernel/yama/ptrace_scope  保存了 ptrace 的 scope 参数,参数定义如下:
0 无限制,任何进程都能添加,只要 uids 相符。
1 仅仅进程的拥有者和 root 可以添加进程,当然也需要进程之间有关系。
2 只有 root 用户可以添加进程。
3 禁止添加进程。
默认参数是 1
所以在第 6 步执行遇到问题,可以先把 kernel.yama.ptrace_scope 参数设置为 0 ,执行第 6 步和第 7 步之后,把 kernel.yama.ptrace_scope 参数再设置为 1 。
添加的命令如下
6.1、执行命令 sudo sysctl -w kernel.yama.ptrace_scope=0 ,设置系统参数。
6.2、恢复进程,输入命令 reptyr 1122323 ,1122323 是刚才隐藏到后台程序的 PID 。
7、输入命令 Ctrl + B D ,脱离当前的 tmux 进程。
7.1、执行命令 sudo sysctl -w kernel.yama.ptrace_scope=1,恢复系统参数.

版权声明:
作者:xinyu2ru
链接:https://www.rxx0.com/software/ubuntu/ru_he_ba_zhi_xing_zhong_de_ming_ling_nuo_dao_tmux_jin.html
来源:RUBLOG-分享我的生活
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>