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

Jür*_*aul 52 shell command-line gnu-screen tmux

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

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

Vil*_*lle 60

这在大多数情况下有效:

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

  1. 使用Ctrl+Z暂停进程。

  2. 在后台恢复进程 bg

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

    你会看到类似的东西:

    [1]+ 11475 Stopped (signal) yourprocessname
    
    Run Code Online (Sandbox Code Playgroud)
  4. 从当前父级(外壳)中取消作业 disown yourprocessname

  5. 开始tmux(首选),或screen

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

    reptyr 11475
    
    Run Code Online (Sandbox Code Playgroud)
  7. 现在您可以分离多路复用器(默认为Ctrl+ BDfortmuxCtrl+ ADfor screen),并在您的进程在tmux/中继续时断开 SSH 连接screen

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

  • 您可能会发现使用 -L 选项会取得一些成功,例如 reptyr -L 1430 在您的情况下。 (3认同)
  • 不幸的是,在运行 `sudo reptyr 1430` 后,我仍然得到:“...[-] 无法在子进程中打开 tty。无法附加到 pid 1430:权限被拒绝” (2认同)
  • 必要时运行:`echo 0 | 须藤三通/proc/sys/kernel/yama/ptrace_scope` (2认同)
  • 在`bg` 之后,进程应该在后台*running*,所以`jobs` 应该说“Running”而不是“Stopped”。 (2认同)

kqw*_*kqw 5

reptyr很好,但我遇到了权限错误

$ reptyr 30622

[-] Unable to open the tty in the child.
Unable to attach to pid 30622: Permission denied
Run Code Online (Sandbox Code Playgroud)

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

这就像一个魅力

$ reptyr -L 30622
Opened a new pty: /dev/pts/4
Run Code Online (Sandbox Code Playgroud)

  • 当我添加“-L”时,我收到一条像您一样的消息,说“打开了一个新的 pty:/dev/pts/6”,但我暂停的“top”没有出现在 tmux 中。我在这里缺少什么? (8认同)

joh*_*n64 -1

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

不过,从 nohup 开始运行会更安全。