取消屏幕会话


65

我正在尝试取消屏幕会话。我注意到许多其他相关问题,但是这些答案都对我没有帮助。我正在尝试终止以下会话:

screen -ls
There is a screen on:
    23520.pts-6.porkypig    (09/30/2013 02:49:47 PM)    (Detached)
1 Socket in /var/run/screen/S-root.

screen -r 23520.pts-6.porkypig

现在我正在开会。根据文档:

http://www.gnu.org/software/screen/manual/screen.html#Quit

我应该按“控制a”,然后按“控制\”。我做到了,没有任何反应。

另一个解决方案是按Ctrl+ a并键入:quit。但是,它什么也没做。实际上,按control+ a,除了出现“ No Other Window”(无其他窗口)消息外,之后什么都不会发生。


1
在屏幕v4.x中,以杀死所有会话,ps aux | grep "SCREEN" | awk '{print $2}' | xargs kill
Fredrick Gauss

2
作为记录,您可以只做screen -r porkypigscreen -r 23520,而不必包括完整的字符串。屏幕名称应该使事情变得简单而不复杂。
米克尔(Mikkel)

Answers:


72

首先,您需要
screen -r 23520像完成操作一样重新连接到屏幕会话。然后按ctrl+ a,然后K按大写,然后y在询问您是否真的要取消会话时按


2
如果屏幕内正在运行的进程存在问题,则此方法有效,但如果屏幕本身存在问题,则不可行。在99%的情况下就是这种情况,并且具有仅影响屏幕内单个窗口而不终止所有窗口的附加好处。
Mikkel

1
这是杀死一个窗口,而不是会话
Eric Wang

52

您可以退出该屏幕而不附加它。首先,找到它的会话:

$ screen -ls

然后退出:

$ screen -XS [session # you want to quit] quit

(-X =执行命令,-S会话PID在其上执行)

[更新]

例:

screen -XS 20411 quit

1
这很简单。通过将-X -S与-XS
AJ

2
如果您复制了innaM答案,则应该将其视为功劳
Martin Thoma

8

这将杀死所有分离的屏幕:

屏幕-ls | grep分离| 切-d。-f1 | awk'{print $ 1}'| xargs杀死

这将杀死所有连接或分离的屏幕

屏幕-ls | grep pts | 切-d。-f1 | awk'{print $ 1}'| xargs杀死

7

因此,有了所有这些官方建议,我们就可以轻松一些,既有效又更加直截了当。

pkill screen

谁想要进入一个未知且不需要的屏幕,只是按下几个几乎可能几乎不记得的命令?这完全避免了它的进入,并直接杀死了它。

另外,如果您有不止一个,这将使他们一举成名。


1
请注意,这会杀死所有正在运行的屏幕,可能不是您想要的。
Mikkel

不是一个好选择。我已经做了一段时间了。有时,这会导致不良行为(例如,立即从您的用户帐户注销)。另外,正如@Mikkel所述,这可能会导致关闭所有屏幕,这不是您想要的。有时您需要继续运行某些屏幕(例如某些正在由系统运行)并停止其他屏幕。
MAChitgarha

2

更新屏幕时遇到此问题。在screen尝试重新连接不管有多少的进程中,当命令将挂起-D-R我添加到命令。但是,screen -ls方便地提供会话的pid,允许您使用以下命令进行干预:

10:42 user ~ $ screen -ls
There is a screen on:
        5730.my_screen     (Detached)
1 Socket in /tmp/screens/S-user.

10:42 user ~ $ sudo kill 5730

10:43 user ~ $ screen -ls
No Sockets found in /tmp/screens/S-user.

(这与Brian Thomas的回答类似,但是他将杀死所有正在运行的屏幕会话,如果您打开了多个屏幕,但只有一个行为不正常,这可能不是您想要的。)


在6个小时的时间里,我在互联网上震惊了……您的答案是唯一可行的方法。谢了哥们!
kRazzy R

1

像您一样,我想取消我的屏幕会话,并发现文档无济于事。深信,必须是键盘快捷键,我发现,
ctrl + a然后\
作品

然后,我得到提示:“真的退出并杀死所有Windows [y \ n]”

我不知道为什么文件说,ctrl + a然后ctrl + \。那对我没有任何帮助。


1

您可以找到所附运行屏幕的进程ID。我发现它与您可以通过命令获取的会话ID相同:
screen -ls
并且您可以使用以下命令来杀死该进程:
kill [sessionId]或者
sudo kill [sessionId]
您可以杀死屏幕,即使该屏幕附加在其他终端窗口上也是如此。


0

按ctrl + d取消屏幕窗口。重复此操作,直到杀死所有屏幕窗口。一旦您用完了,所有的Windows屏幕将终止会话并终止。如果您没有很多窗户,最短的解决方案

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.