我刚刚离开办公室,有一个活动的终端窗口正在 Centos 7 服务器上运行脚本。现在我在家里通过 SSH 登录,想看看它到了哪里。这可能吗?我可以从这里重新加入同一个终端窗口吗?
答案1
正如@Sven提到的,最好的选择是使用screen
或tmux
。这些工具被称为“终端多路复用器”。它们允许您创建可以附加到实际登录名或从实际登录名中解除附加的shell会话。这些工具不仅可用于从另一个终端检查您的工作,还具有其他功能,包括与其他用户共享您的会话并确保您的命令不会在您失去互联网连接时停止。如果您正在搜索screen
,您可以尝试搜索“GNU Screen”。这两个工具在大多数Linux系统上都可用。
通常,您会启动会话,然后在该会话内执行命令。但是,如果您已经启动了命令,您可能需要查找有关将正在运行的命令移入屏幕会话的文章。不过,我不建议第一次在重要的事情上尝试这样做。这个问题可能有用:
如果您只想检查进程是否正在运行,我最喜欢的工具是 strace。此工具允许您查看进程进行的每个内核调用。理解输出可能需要一些技巧,但它至少可以让您了解进程是否正在运行,如果您仔细观察,可能会发现它正在打开的文件名。为此,首先,找到 PID,可能通过搜索ps aux|grep yourcommand
,然后:
strace -fp YOUR_PID
你可以按 ^C 退出。它可能不允许您重新连接,但如果你只是想知道它在做什么,那就足够了。
答案2
一种方法:TMUX
正如大多数答案已经指出的那样 - 如果在现有的 SSH 会话中 - 你可以使用tmux
(或screen
) 命令
tmux
现在,您处于一个新的 bash 会话中,您可以在其中启动程序/命令。您可以随时关闭它(但不能使用 CTRL+D,而是通过关闭窗口)并稍后通过与同一台计算机上的同一用户建立 SSH 连接并输入命令来返回它
tmux attach
您还可以多种的 tmux
通过给它们命名
tmux new -s myname
tmux
你可以通过以下方式查看用户所有打开的会话列表:
tmux ls
并附加到命名tmux
会话
tmux a -t myname
寻找全面的tmux cheat sheet
这里。
对于正在运行的程序
到目前为止的答案似乎没有意识到你可以将一个已经运行的进程移动到另一个tmux
/screen
进程这个答案指出。执行此工作的程序称为reptyr
,在 Ubuntu / Debian 下,您可以使用简单的
sudo apt-get install reptyr
之后,找出正在运行的程序的进程 ID(例如使用top
或htop
),启动一个tmux
会话和一个简单的
reptyr PID
将会把正在运行的进程重新附加到你的tmux
bash 会话。
答案3
将来,您可以使用screen
或tmux
然后重新连接正在运行的会话。
答案4
正如已经指出的那样,我建议将来使用tmux
或,但这只有在您事先考虑过的情况下才有效。screen
我遇到过好几次你遇到的情况。如果你保持运行的终端在办公室台式电脑上,你可以通过 SSH 进入你的电脑并启动 VNC 服务器。这样,你至少可以检查打开的终端。