在Linux中关闭已附加的屏幕

74

我在Linux上创建了一个名为“myscreen”的屏幕,但它突然停止响应。我关闭了终端并尝试重新打开。"screen -ls" 显示该屏幕已连接。我尝试了以下命令,但没有任何响应。

screen -r myscreen
screen -D myscreen
screen -D -RR myscreen
screen -X -S myscreen quit

非常感谢任何重新附加到屏幕或终止屏幕的帮助。


不确定“screen”是什么,但如果它是一个进程,那么使用“kill -9”命令? - Alptigin Jalayr
我不确定屏幕是否是一个进程。但是,“kill -9”会杀死整个进程。但我想杀死特定的屏幕并保留其他屏幕不受影响。 - Slowcoder
1
你试过 screen -dr myscreen 吗? - Walfie
尝试过使用命令 "screen -dr myscreen"。 - Slowcoder
11个回答

128
screen -X -S SCREENID kill

或者,您可以使用以下命令。

screen -S SCREENNAME -p 0 -X quit

您可以通过执行screen -ls命令来查看屏幕会话列表。


我注意到第一个命令序列只会关闭最后一个窗口,如果你有多个窗口打开,而第二个命令则无论窗口数量如何都会关闭整个屏幕。 - Brian Keith
有没有可能删除所有进程并清除屏幕? - Jürgen K.
6
好的,您可以使用 pkill screenkillall screen 命令。这两个命令的作用相同,都是用来终止名为 "screen" 的进程。 - Desta Haileselassie Hagos

22

从终端创建屏幕:

screen -S <screen_name>

查看屏幕列表:

<screen -ls> or <screen -list>

前往特定屏幕:

<screen -x screen_name>

<screen -r screen_name>

显示屏内部


关闭显示屏:

give ctrl+d screen will get terminated

分离screen:

 give <ctrl+ad>or <screen -d >screen will get detached
重新连接屏幕:

要重新连接屏幕:

screen -x <screen_name> or screen -r <screen_name>
从终端杀死一个屏幕:

从终端杀死一个屏幕:

<screen -X -S screen_name quit> 
或者
<screen -X -S screen_name kill>

您可以使用 screen_name 或 process_id 来执行命令。


3
这只是一份屏幕命令列表,不是对这个特定问题的回答。 - Jeffrey Bosboom
1
这些命令列表帮助我解决了我的问题,感谢您的发布。 - Adrian Torrie

7

这个方法对我非常有效。通过以下方式获取屏幕 ID:

screen -r

或者

screen -ls

终止该窗口: kill -9 <screenID>。 此时屏幕已经无法使用, 可以使用以下指令彻底清除: screen -wipe


5

来自Screen用户手册

screen -d -r "screenName"

重新连接会话,如果必要,先分离会话。

这应该是被接受的答案。没有失去屏幕会话的最简单的解决方案!谢谢! - Tobias Gaertner
这里的-d和-r是做什么用的? - Santosh
重新连接一个会话,如果需要的话先分离它。 - Cugomastik

3

使用以下代码在终端中关闭一个已分离的屏幕:

screen -X -S "SCEEN_NAME" quit

如果您已经连接成功,则可以使用以下命令(在终端和屏幕内):

exit

1
假设您的屏幕ID有一个模式。然后,您可以使用以下代码一次性关闭所有附加的屏幕。
result=$(screen -ls | grep 'pattern_of_screen_id' -o)
for i in $result; 
do      
    `screen -X -S $i quit`;
done

1
你可以创建一个函数来杀死所有现有的会话。查看关闭所有已分离的屏幕会话
要列出所有活动会话,请使用 screen -r。
列出后,用鼠标选择您感兴趣的会话并粘贴它。就像这样:
screen -r。

0
通常我不会给我的屏幕实例命名,所以这可能没有用,但你尝试过不带'myscreen'部分的screen -r吗?对我来说,通常screen -r会显示每个屏幕的PID,然后我可以使用screen -d -r <PID>重新连接。

是的,那是我尝试的第一个命令。但它没有响应。我尝试以root用户身份打开,但屏幕甚至没有被root用户帐户检测到。 - Slowcoder

0
您可以找到已连接的运行中屏幕的进程 ID。 您可以通过以下命令获取会话 ID,该会话 ID 与进程 ID 相同:
screen -ls
您可以使用以下命令杀死该进程:
kill [sessionId]
sudo kill [sessionId]

0

对我来说,没有任何一个screen命令能够杀死或重新连接屏幕。任何screen命令都会卡住。我找到了另一种方法。

每个正在运行的屏幕都有一个与之关联的文件:

/var/run/screen/S-{user_name}

该文件夹中的文件将与运行screen -list时的屏幕名称匹配。如果您删除该文件,则会终止相关的运行屏幕(已分离或已连接)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接