将当前命令传输到可分离的会话(tmux /屏幕)


41

我目前正在运行一个备份,现在需要将其转移到tmux或上可拆卸的备份上screen。当前正在运行命令时,有没有办法做到这一点?

我可以通过按Ctrl+ 将命令发送到后台,Z然后通过发出fg命令将其备份。但是我不知道退出终端后该会话是否可以返回。


1
没有办法做到这一点。您必须从屏幕(或其他)会话中启动该命令才能使其分离。
Dan D.

Answers:


45

在大多数情况下,这是可行的:

先决条件:已经reptyrtmux/ screen安装;您可以使用apt-get或找到它们yum,具体取决于您的平台。

  1. 使用Ctrl+ Z暂停该过程。

  2. 使用以下命令在后台恢复该过程 bg

  3. 查找后台进程的进程ID jobs -l

    您会看到类似以下内容:

    [1]+ 11475 Stopped (signal) yourprocessname
    
  4. 使用以下命令从当前父项(shell)中取消工作 disown yourprocessname

  5. 开始tmux(首选)或screen

  6. 使用reptyr 将进程重新附加到tmux/ screen会话:

    reptyr 11475
    
  7. 现在,您可以分离多路复用器(默认Ctrl+ BD用于tmux,或Ctrl+ AD用于screen),并在tmux/ 中继续进行过程时断开SSH的连接screen

  8. 之后,当您再次使用SSH连接时,可以连接到多路复用器(例如tmux attach)。


2
不幸的是,跑步后,sudo reptyr 1430我仍然得到:“ ... [-]无法在孩子中打开tty。无法附加到pid 1430:权限被拒绝”
Daryl Spitzer 2014年

3
您可以使用-L选项找到一些成功,例如reptyr -L 1430。
cgseller

1
必要时运行此程序:echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
Yanhao

它也可以通过yo在arch上找到:archlinux.org/packages/community/i686/reptyr(不是apt-get或yum)
Tommy 2016年

1
之后bg,该进程应在后台运行,因此jobs应说Running而不是Stopped
G-Man说'Resstate Monica''May

2

reptyr 很好,但出现权限错误

$ reptyr 30622

[-] Unable to open the tty in the child.
Unable to attach to pid 30622: Permission denied

然后发现
-L Like '-l', but also redirect the child's stdio to the slave.

像魅力一样运作

$ reptyr -L 30622
Opened a new pty: /dev/pts/4

2
当我添加时,-L我收到了一条如您所说的消息,Opened a new pty: /dev/pts/6但我的暂停状态top未显示在tmux中。我在这里想念什么?
Mehrad Mahmoudian

-1

如果该命令可用,则可以使用disown将作业与其终端分离。

从头开始运行nohup更加安全。


您可以对此进行扩展吗?从什么开始你是什么意思nohupdisowning流程如何运作?
达斯Android

disown会从终端分离后台进程(您使用control-z使其进入后台),因此该过程将在终端消失后继续进行。您可以在control-z之后键入disown(如果找到了该命令)。但是,从理论上讲,这可能无法可靠地运行。下次通过在程序前面添加nohup更加安全,这样您就可以安全地退出终端了。
johnshen64

如前所述,我发现“拒绝”非常不可靠。nohup并不是真的好很多。reptyr可能是一个解决方案。github.com/nelhage/reptyr
anastrophe

这不能回答问题。问题不仅是“如何关闭终端而不杀死备份”,还在于“以后如何恢复”。正确答案是“您不能”。
加布

我在这里看到可能存在语义上的分歧,这是一个非常受欢迎的搜索结果,例如“可重定位”,“与位置无关”,“分离tmux”等关键字,因此希望您能原谅死角。由于停止程序和恢复程序之间的内存映射不同,您是否表示“不能”?备份程序只会通过给定的文件结构来知道要备份哪些文件,并且该文件结构的存在使将来可以映射该物理内存。(如果情况并非如此,我们将为您提供支持!)
John P
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.