我从我的家用电脑上使用 putty,通过 ssh 连接到远程服务器,然后运行了一个需要几个小时才能完成的 python 程序,并且在运行时会打印一些内容。现在过了一会儿,我的互联网断开了,我不得不关闭并重新打开 putty 和 ssh。如果我输入“top”,我可以看到在后台运行的 python 程序及其 PID 号。是否有一个命令我可以用来基本上重新打开该进程并看到它再次打印其内容?
谢谢
答案1
您可以使用 screen 命令并启动一个作业,例如编译内核,例如:
screen -R -S YOUR_SESSION_NAME
然后按 Enter 键返回会话
退出会话:CTRL++ad
要列出您的会话:
mohsen@debian:~$ screen -ls
There is a screen on:
30473.compilekernel (03/06/2015 05:59:05 AM) (Detached)
1 Socket in /var/run/screen/S-mohsen.
要分离到您的会话:
screen -dr 30473
当您不使用会话名称时,屏幕本身使用以下格式,并且很难为您的服务器提供多个会话:
pid.tty.host
例如 :
30522.pts-0.debian
答案2
GNU 屏幕http://www.gnu.org/software/screen/是一个在终端中运行的应用程序,创建一种虚拟会话。当您断开连接时,screen 会继续作为分离的实体运行,您可以稍后重新连接。
首先,如果尚未安装 screen(可能已安装),请安装 screen。
然后登录到您的服务器。
启动屏幕会话:
$ screen
现在您在屏幕中。开始你的过程。我假设它叫做 foo.py。您可以正常启动它,或者您可能更喜欢启动它并将其发送到后台:
$ foo.py &
如果您不想将其发送到后台(也就是说,您希望看到它在终端中运行),那么只需正常启动它即可 - 但随后您将需要切换到新屏幕:
$ foo.py
脚本开始运行后,按 ctrl-a ctrl-c(即“创建新屏幕”)。
这将创建一个新的空屏幕。您的脚本仍在运行,但它在另一个屏幕上运行。通过键入 ctrl-a ctrl-n(即转到下一个屏幕)向自己证明这一点。
当您准备好注销时,请输入:
$ screen -d
这会让你脱离虚拟屏幕。换句话说,一切仍在运行,就像你离开它一样。
您甚至可以关闭 PuTTY。您的服务器仍在运行 screen 以及您在其中启动的任何内容。
当您想要重新连接时,请重新登录并重新连接到屏幕:
$ screen -raAd
现在你又回到了屏幕上。您可能会看到 foo.py 命令的输出,或者您可能需要使用 ctrl-a ctrl-n 切换到它。
不管怎样,事情就是这样完成的。