从另一个SSH会话中分离出屏幕
简介
在Linux系统中,有可能通过SSH(Secure SHell)打开多个终端会话。当在远程服务器上工作时,这可能是非常有用的,你想同时保持多个终端shell窗口打开。然而,在有些情况下,你可能需要强制分离/删除一个正在另一个SSH会话中运行的屏幕会话。如果你不小心让一个屏幕会话在远程服务器上运行,然后关闭了你的终端窗口,或者你想结束一个你的团队中的其他人让它运行的屏幕会话,这就可能发生。在这篇文章中,我们将看看如何从Linux的另一个SSH会话中强制分离一个屏幕会话。
解除/暂停SSH屏幕会话
要分离一个屏幕会话,你将需要首先使用SSH连接到远程服务器。一旦你登录了,你可以通过执行带有-ls标志的screen命令来列出可用的屏幕会话。这个命令将显示当前在服务器上运行的所有屏幕会话的列表,以及它们的会话名称和进程ID。
例如,如果你有两个屏幕会话在服务器上运行,screen -ls命令的输出可能看起来像这样
There are 2 screens on:
12345.pts-0.server (Detached)
12346.pts-0.server (Detached)
2 Sockets in /var/run/screen/S-user.
要分离一个屏幕会话,我们使用screen -d命令,后面跟着会话名称或进程ID。例如,要分离进程ID为44345的屏幕会话,我们使用以下命令
$ screen -d 44345
如果屏幕会话目前是连接在一起的(或者它正在被另一个终端窗口使用),你将需要使用”-D “标志来强制它分离出来。比如说
$ screen -D 12345
分离所有屏幕会话
如果你想一次性分离所有的屏幕会话,你可以使用screen -X命令,后面加上-S标志和-Q标志。比如说
screen -X -S . -Q quit
这将分离当前在服务器上运行的所有屏幕会话。
在bash脚本中使用screen命令
screen命令在脚本中很有用,可以在远程服务器上自动执行任务。例如,你可以用一个脚本来启动一个屏幕会话,在屏幕会话中运行一个命令,然后在命令完成后分离屏幕会话。
要在脚本中使用screen命令,你可以把它作为一个命令行参数。例如,下面的脚本将启动一个屏幕会话,运行ls命令,然后分离屏幕会话
#!/bin/bash
screen -S myScrnsession -d -m ls
要附加屏幕会话并查看ls命令的输出,你可以使用上一段中的screen -r命令。
$ screen -r myScrnsession
附加/恢复一个已分离的SSH屏幕会话
如果你已经分离了一个屏幕会话,并想在以后恢复它,你可以使用屏幕命令-r选项,如上一节所述。然而,如果有多个同名的分离的屏幕会话,你可能需要使用-d标志来指定你想附加到哪个会话。
例如,要附加进程ID为44345的屏幕会话,你可以使用以下命令
$ screen -r 44345
另外,你可以使用-d和-R标志来附加到最近分离的同名屏幕会话。如果你有多个分离的屏幕会话,而你不确定你想附加到哪一个,这可能很有用。
$ screen -d -R 44345
杀死一个SSH屏幕会话
如果你想完全杀死一个屏幕会话,你可以使用带-X选项的screen命令,后面加上-S标志和会话名称或进程ID。例如,要杀死进程ID为44345的屏幕会话,你可以使用以下命令
$ screen -x -S 44345 quit
结论
在这篇文章中,我们经历了在Linux中从另一个SSH会话中强行分离一个屏幕会话的步骤。我们还研究了如何附加和杀死屏幕会话。通过使用这些命令,你可以很容易地管理远程服务器上的屏幕会话,并确保它们不会被不必要地留下运行。