将当前命令转移到可分离会话(tmux/screen)

将当前命令转移到可分离会话(tmux/screen)

我目前正在运行备份,现在需要将其传输到可拆卸的备份,例如tmuxscreen。当命令当前正在运行时,有没有办法执行此操作?

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

答案1

大多数情况下,这是有效的:

先决条件:已安装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+ BDfortmuxCtrl+ ADfor screen),并在进程在tmux/中继续时断开 SSH 连接screen

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

答案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

答案3

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

不过,首先使用 nohup 运行它会更安全。

相关内容