我有一台 ReadyNAS 102,上面连接了几个 USB 驱动器,并通过 SSH 从 Windows 8 计算机连接到它。有时我想在 NAS 上的卷之间复制文件。不幸的是,我还意外关闭了 SSH 会话,从而意外中断了复制过程。
我是否可以在 SSH 上分叉cp
或mv
进程?目前,当我关闭 SSH 会话时(无论是意外关闭终端窗口还是关闭笔记本电脑屏幕并使其进入睡眠状态),复制过程都会停止。
我可以做类似的事情cp ~/blah /some/other/path &
并让该过程在后台继续运行直至完成,即使 SSH 会话终止?
答案1
您正在寻找gnu 屏幕
Screen 是一个全屏窗口管理器,它在多个进程(通常是交互式 shell)之间多路复用物理终端。每个虚拟终端都提供 DEC VT100 终端的功能,此外还提供 ANSI X3.64(ISO 6429)和 ISO 2022 标准的几个控制功能(例如,插入/删除行和支持多个字符集)。每个虚拟终端都有一个回滚历史记录缓冲区,以及一个复制粘贴机制,允许用户在窗口之间移动文本区域。调用 screen 时,它会创建一个带有 shell(或指定命令)的窗口,然后不再打扰您,以便您可以像平常一样使用该程序。然后,您可以随时创建新的(全屏)窗口,其中包含其他程序(包括更多 shell)、终止当前窗口、查看活动窗口列表、打开和关闭输出日志记录、在窗口之间复制文本、查看回滚历史记录、在窗口之间切换等。所有窗口都完全独立地运行其程序。当程序窗口当前不可见时,甚至当整个屏幕会话与用户终端分离时,程序仍会继续运行。
简而言之,它允许您创建“虚拟终端”,这些终端将保持活动状态,直到您自己将其终止。在屏幕会话中运行的任何进程都保持活动状态。如果您的 ssh 会话终止,您只需启动一个新会话并重新连接屏幕即可。
本文提供了很好的教程