如何远程观看终端窗口?

sam*_*ice 8 linux ssh terminal centos7

我早些时候离开办公室时,有一个在 Centos 7 服务器上运行脚本的活动终端窗口。现在我已经从家里通过 SSH 登录了,我想看看它会到达哪里。这可能吗?我可以从这里重新加入同一个终端窗口吗?

小智 14

正如@Sven 提到的,最好的选择是使用screenor tmux。这些是称为“终端多路复用器”的工具。它们允许您创建 shell 会话,这些会话可以从实际登录中附加和分离。这些工具不仅可用于从另一个终端检查您的工作,还具有其他功能,包括与其他用户共享您的会话,并确保您的命令在您断开互联网连接时不会停止。如果您正在搜索screen,您可以尝试搜索“GNU Screen”。这两种工具在大多数 Linux 系统上都可用。

通常,您会启动会话,然后在该会话内执行您的命令。但是,如果您已经启动了该命令,则可能需要查找有关将正在运行的命令移动到屏幕会话中的文章。不过,我不建议第一次在重要的事情上尝试这个。这个问题可能有点用:

将已在运行的进程移至 Screen

如果您只想检查进程是否正在运行,我最喜欢的工具是 strace。此工具允许您查看进程进行的每个内核调用。理解输出可能需要一些技巧,但它至少应该让您知道进程是否正在运行,如果您足够仔细地观察,可能会捕捉到它打开的文件名。要做到这一点,首先,找到 PID,也许通过搜索ps aux|grep yourcommand,然后:

strace -fp YOUR_PID
Run Code Online (Sandbox Code Playgroud)

你可以 ^C 摆脱它。它可能不允许您重新连接,但如果您只想知道它在做什么,那应该就足够了。


Man*_* CJ 9

一种方法:TMUX

正如大多数答案已经指出的那样 - 如果在现有的 SSH 会话中 - 您将tmux(或screen) 与命令一起使用

tmux
Run Code Online (Sandbox Code Playgroud)

您现在处于一个新的 bash 会话中,您可以在其中启动您的程序/命令。您可以随时关闭它(但不能使用 CTRL+D,而是关闭窗口),稍后通过在同一台机器上与同一用户建立 SSH 连接并编写命令来返回它

tmux attach
Run Code Online (Sandbox Code Playgroud)

您还可以通过给它们命名来拥有多个 tmux会话

tmux new -s myname
Run Code Online (Sandbox Code Playgroud)

您可以使用tmux以下命令查看用户的所有打开会话的列表

tmux ls
Run Code Online (Sandbox Code Playgroud)

并附加到一个命名tmux会话

tmux a -t myname
Run Code Online (Sandbox Code Playgroud)

tmux cheat sheet 在这里找到一个全面的。

对于正在运行的程序

到目前为止,答案似乎没有意识到您可以将一个已经运行的进程移动到另一个tmux/screen正如这个答案所指出的那样。完成这项工作的程序被调用reptyr,在 Ubuntu / Debian 下你可以用一个简单的安装它

sudo apt-get install reptyr
Run Code Online (Sandbox Code Playgroud)

之后,找出您正在运行的程序的进程 ID(例如使用tophtop),启动一个tmux会话和一个简单的

reptyr PID
Run Code Online (Sandbox Code Playgroud)

将正在运行的进程重新附加到您的tmuxbash 会话。


Sve*_*ven 5

将来,您可以使用screentmux然后重新附加正在运行的会话。