我目前正在运行备份,现在需要将其传输到可拆卸的备份,例如tmux
或screen
。当命令当前正在运行时,有没有办法执行此操作?
Ctrl我可以通过按+将命令发送到后台Z,然后通过发出命令将其恢复fg
。但我不知道退出终端时该会话是否可以返回。
答案1
大多数情况下,这是有效的:
先决条件:已安装reptyr
和tmux
/ screen
;您可以使用apt-get
或找到它们yum
,具体取决于您的平台。
使用Ctrl+Z暂停该进程。
使用以下命令在后台恢复该进程
bg
使用以下命令查找后台进程的进程 ID:
jobs -l
你会看到类似这样的内容:
[1]+ 11475 Stopped (signal) yourprocessname
使用以下命令与当前父级(shell)断绝该作业
disown yourprocessname
开始
tmux
(首选),或者screen
。使用 reptyr将进程重新附加到
tmux
/会话:screen
reptyr 11475
现在,您可以分离多路复用器(默认Ctrl+ B、Dfor
tmux
或Ctrl+ A、Dforscreen
),并在进程在tmux
/中继续时断开 SSH 连接screen
。稍后当您再次使用 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 运行它会更安全。