[转帖]reptyr, 将正在运行的程序转换为新终端
Posted jinanxiaolaohu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[转帖]reptyr, 将正在运行的程序转换为新终端相关的知识,希望对你有一定的参考价值。
- 源代码名称:reptyr
- 源代码网址:http://www.github.com/nelhage/reptyr
- reptyr源代码文档
reptyr源代码下载
- Git URL:
git://www.github.com/nelhage/reptyr.git
- Git Clone代码到本地:
git clone http://www.github.com/nelhage/reptyr
- Subversion代码到本地:
$ svn co --depth empty http://www.github.com/nelhage/reptyr
Checked out revision 1.
$ cd repo
$ svn up trunk
reptyr -"ptying"程序的工具。
reptyr是一个用于获取现有运行程序并将它的附加到新终端的实用程序。 通过ssh启动了一个长期运行的进程,但是必须离开,不要中断它? 只需启动一个屏幕,使用reptyr抓取它,然后在主页上杀死ssh会话和头部。
用法
reptyr PID
"reptyr PID grab将获取带有 id PID的进程,并将它的附加到当前终端。
附加后,进程将从新终端输入输入并写入到新终端,包括^C和 ^Z。 ( 不幸的是,如果你背景的话,你仍然需要在旧终端运行"bg"或者"fg"。 在不修补 shell的情况下,可能不可能以合理的方式修复
典型用法 Pattern
- 启动一个长期运行的进程,比如
top
- 使用 ctrl z 进行后台处理
- 在后台恢复进程:
bg
- 使用
jobs -l
显示正在运行的后台作业,这应该如下所示:
[1]+ 4711 Stopped (signal) top
- (
jobs -l
中的-l
确保你将获得 PID )
- Disown使用
disown top
从当前父进程中删除作业。 在这里之后,jobs
将不再显示任务,但是 ps -a
将。
- 启动你的终端多路复用器,比如
tmux
- 重新附加到backgrounded进程:
reptyr 4711
- 分离终端多路复用器( 比如。 按住ctrl键并关闭 ssh
- 重新连接 ssh,连接到你的多路复用器( 比如。
tmux attach
),快乐 !
但是等等这不是screenify"?
现在有一个叫做"screenify"的shell script 在 10年近于 internet,现在使用gdb到( 预计) 完成同样的工作。 区别在于reptyr工作得很好。
如果使用screenify附加"较少",它仍将从旧终端获取输入。 如果使用screenify附加一个ncurses程序并调整窗口大小,程序将不会注意到。 如果使用screenify附加进程,则新终端中的^C将无法工作。
我的reptyr解决了所有这些问题,并且是我知道的唯一这样的工具。 有关如何完成这里任务的更多详细信息,请参见下文。
端口
reptyr支持Linux和 FreeBSD。 并非所有功能都在FreeBSD上可用。 ( 尤其是FreeBSD目前不支持 reptyr -T
。
在系统调用级别和终端 ioctl ( )的详细信息上,reptyr
使用ptrace附加到目标和控制它,因此高度依赖于系统调用 API。 从技术上讲,其他操作系统可能是可行的,但是需要对相关平台的低级别知识,并且可能需要大量的refactors。
reptyr在 i386,x86_64和ARM上工作。 到它的他架构的端口应该是简单的,在大多数情况下,如添加一个in文件并向 ptrace.c. 中添加子句。
Maverick ptrace_scope上的
reptyr
依赖于 ptrace
系统调用附加到远程程序。 在Ubuntu和更高版本上,由于安全原因,这种能力被禁用。 你可以通过执行以下操作临时启用它
# echo 0>/proc/sys/kernel/yama/ptrace_scope
作为 root,或者通过编辑文件/etc/sysctl. d/10-ptrace。conf,也包含了关于这里设置完成的更多信息。
reptyr--l
作为额外功能,如果运行"reptyr -l",reptyr将在从端创建一个新的伪终端对,并将它的输出输出输出到。
如果在gdb中调试程序,那么可以将该 NAME 传递给"设置劣质 pty"。 因为没有任何现有的程序听到这个 rtc,这将比传递 shell的现有终端更好。
:它是如何工作的?
reptyr做的主要事情就是它实际上改变了你正在连接的进程的控制终端。 我写了一个博客帖子,解释了所涉及的内容。
发音
我像"中继器"一样发音,但是因为这很容易明确,"re-p-t-y-er"也可以接受。
CREDITS
reptyr是由 Nelson Elhage nelhage@nelhage.com 公司编写的。 有问题或者 Bug 报告请与他联系。
电子邮件地址
http://github.com/nelhage/reptyr
- 源代码名称:reptyr
- 源代码网址:http://www.github.com/nelhage/reptyr
- reptyr源代码文档
reptyr源代码下载
- Git URL:
git://www.github.com/nelhage/reptyr.git
- Git Clone代码到本地:
git clone http://www.github.com/nelhage/reptyr
- Subversion代码到本地:
$ svn co --depth empty http://www.github.com/nelhage/reptyr Checked out revision 1. $ cd repo $ svn up trunk
reptyr是一个用于获取现有运行程序并将它的附加到新终端的实用程序。 通过ssh启动了一个长期运行的进程,但是必须离开,不要中断它? 只需启动一个屏幕,使用reptyr抓取它,然后在主页上杀死ssh会话和头部。
用法
reptyr PID
"reptyr PID grab将获取带有 id PID的进程,并将它的附加到当前终端。
附加后,进程将从新终端输入输入并写入到新终端,包括^C和 ^Z。 ( 不幸的是,如果你背景的话,你仍然需要在旧终端运行"bg"或者"fg"。 在不修补 shell的情况下,可能不可能以合理的方式修复
典型用法 Pattern
- 启动一个长期运行的进程,比如
top
- 使用 ctrl z 进行后台处理
- 在后台恢复进程:
bg
- 使用
jobs -l
显示正在运行的后台作业,这应该如下所示:[1]+ 4711 Stopped (signal) top
- (
jobs -l
中的-l
确保你将获得 PID )
- Disown使用
disown top
从当前父进程中删除作业。 在这里之后,jobs
将不再显示任务,但是ps -a
将。 - 启动你的终端多路复用器,比如
tmux
- 重新附加到backgrounded进程:
reptyr 4711
- 分离终端多路复用器( 比如。 按住ctrl键并关闭 ssh
- 重新连接 ssh,连接到你的多路复用器( 比如。
tmux attach
),快乐 !
但是等等这不是screenify"?
现在有一个叫做"screenify"的shell script 在 10年近于 internet,现在使用gdb到( 预计) 完成同样的工作。 区别在于reptyr工作得很好。
如果使用screenify附加"较少",它仍将从旧终端获取输入。 如果使用screenify附加一个ncurses程序并调整窗口大小,程序将不会注意到。 如果使用screenify附加进程,则新终端中的^C将无法工作。
我的reptyr解决了所有这些问题,并且是我知道的唯一这样的工具。 有关如何完成这里任务的更多详细信息,请参见下文。
端口
reptyr支持Linux和 FreeBSD。 并非所有功能都在FreeBSD上可用。 ( 尤其是FreeBSD目前不支持 reptyr -T
。
在系统调用级别和终端 ioctl ( )的详细信息上,reptyr
使用ptrace附加到目标和控制它,因此高度依赖于系统调用 API。 从技术上讲,其他操作系统可能是可行的,但是需要对相关平台的低级别知识,并且可能需要大量的refactors。
reptyr在 i386,x86_64和ARM上工作。 到它的他架构的端口应该是简单的,在大多数情况下,如添加一个in文件并向 ptrace.c. 中添加子句。
Maverick ptrace_scope上的
reptyr
依赖于 ptrace
系统调用附加到远程程序。 在Ubuntu和更高版本上,由于安全原因,这种能力被禁用。 你可以通过执行以下操作临时启用它
# echo 0>/proc/sys/kernel/yama/ptrace_scope
作为 root,或者通过编辑文件/etc/sysctl. d/10-ptrace。conf,也包含了关于这里设置完成的更多信息。
reptyr--l
作为额外功能,如果运行"reptyr -l",reptyr将在从端创建一个新的伪终端对,并将它的输出输出输出到。
如果在gdb中调试程序,那么可以将该 NAME 传递给"设置劣质 pty"。 因为没有任何现有的程序听到这个 rtc,这将比传递 shell的现有终端更好。
:它是如何工作的?
reptyr做的主要事情就是它实际上改变了你正在连接的进程的控制终端。 我写了一个博客帖子,解释了所涉及的内容。
发音
我像"中继器"一样发音,但是因为这很容易明确,"re-p-t-y-er"也可以接受。
CREDITS
reptyr是由 Nelson Elhage nelhage@nelhage.com 公司编写的。 有问题或者 Bug 报告请与他联系。
电子邮件地址
http://github.com/nelhage/reptyr
以上是关于[转帖]reptyr, 将正在运行的程序转换为新终端的主要内容,如果未能解决你的问题,请参考以下文章
pandas:将 int Series 转换为新的 StringDtype