小智 14
正如@Sven 提到的,最好的选择是使用screen
or tmux
。这些是称为“终端多路复用器”的工具。它们允许您创建 shell 会话,这些会话可以从实际登录中附加和分离。这些工具不仅可用于从另一个终端检查您的工作,还具有其他功能,包括与其他用户共享您的会话,并确保您的命令在您断开互联网连接时不会停止。如果您正在搜索screen
,您可以尝试搜索“GNU Screen”。这两种工具在大多数 Linux 系统上都可用。
通常,您会启动会话,然后在该会话内执行您的命令。但是,如果您已经启动了该命令,则可能需要查找有关将正在运行的命令移动到屏幕会话中的文章。不过,我不建议第一次在重要的事情上尝试这个。这个问题可能有点用:
如果您只想检查进程是否正在运行,我最喜欢的工具是 strace。此工具允许您查看进程进行的每个内核调用。理解输出可能需要一些技巧,但它至少应该让您知道进程是否正在运行,如果您足够仔细地观察,可能会捕捉到它打开的文件名。要做到这一点,首先,找到 PID,也许通过搜索ps aux|grep yourcommand
,然后:
strace -fp YOUR_PID
Run Code Online (Sandbox Code Playgroud)
你可以 ^C 摆脱它。它可能不允许您重新连接,但如果您只想知道它在做什么,那应该就足够了。
正如大多数答案已经指出的那样 - 如果在现有的 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(例如使用top
或htop
),启动一个tmux
会话和一个简单的
reptyr PID
Run Code Online (Sandbox Code Playgroud)
将正在运行的进程重新附加到您的tmux
bash 会话。