杀死分离的屏幕会话[关闭]

Posted

技术标签:

【中文标题】杀死分离的屏幕会话[关闭]【英文标题】:Kill detached screen session [closed] 【发布时间】:2010-12-03 08:09:21 【问题描述】:

我从某个地方了解到,分离的屏幕可以被杀死

screen -X -S [session # you want to kill] kill

[session # you want to kill] 可以从哪里得到

screen -ls

但这不起作用。哪里不对了?正确的方法是什么?

【问题讨论】:

“某处”并不总是一个好的信息来源。试试“人屏”。 正确的命令是screen -S sessionname -p 0 -X quit killall -# screen [# = 你想杀死的屏幕数] 我只是使用 exit 在屏幕中时 CTRL + D 是最简单的命令。 【参考方案1】:

"kill" 只会杀死一个屏幕窗口。要“杀死”整个会话,请使用 quit

示例

$ screen -X -S [session # you want to kill] quit

对于无效会话,请使用: $屏幕-擦除

【讨论】:

在 ubuntu 中输入“退出”(不带引号):P exit 有效,但需要在打开的每个屏幕中输入。 quit 甚至不起作用 @kapad 实际上退出工作如果你把它写成内联 -X -S pid/sockname quit 在 OSX 上,在任何终端上输入 screen -X quit 会终止所有活动会话 Ctrl + D 也可以【参考方案2】:

您可以通过执行以下操作来终止在屏幕会话中没有响应的分离会话。

    键入 screen -list 以识别分离的屏幕会话。

    ~$ 屏幕列表 屏幕上有: 20751.Melvin_Peter_V42(分离)

    注意:20751.Melvin_Peter_V42 是您的会话 ID。

    附加到分离的屏幕会话

    screen -r 20751.Melvin_Peter_V42

    连接到会话后,按 Ctrl + A 然后输入 :quit

【讨论】:

你可以不用全名直接使用 screen -r 20751 或:Ctrl + a, k @laffuste 的评论对我有用,但 quit:quit 在我的远程 Linux 服务器上导致 command not found(可能是操作系统或屏幕版本之间的差异) 一旦附加到屏幕上,exit 也可以使用【参考方案3】:

列表屏幕:

screen -list

输出:

There is a screen on:
23536.pts-0.wdzee       (10/04/2012 08:40:45 AM)        (Detached)
1 Socket in /var/run/screen/S-root.

终止屏幕会话:

screen -S 23536 -X quit

【讨论】:

'screen -ls' 也可以。 ;)【参考方案4】:

如果给出一些有意义的名称,那么终止会话会更容易:

//Creation:
screen -S some_name proc
// Kill detached session
screen -S some_name -X quit

【讨论】:

为什么是screen -S 而不是screen -r 这个答案使用会话的名称,这比查找 ID 方便得多。谢谢!【参考方案5】:

你可以直接到screen session所在的地方运行:

 screen -ls

导致

 There is a screen on:
         26727.pts-0.devxxx      (Attached)
 1 Socket in /tmp/uscreens/S-xxx. <------ this is where the session is.

然后删除它:

    cd /tmp/uscreens/S-xxx
    ls
    26727.pts-0.devxxx
    rm 26727.pts-0.devxxx
    ls

uscreens 目录中将不再包含26727.pts-0.devxxx 文件。现在确保只需输入以下内容:

screen -ls

你应该得到:

在 /tmp/uscreens/S-xxx 中找不到套接字。

【讨论】:

如果屏幕“卡住”,这是唯一可行的解​​决方案,即。没有死,但不能附着。 这在屏幕完全锁定时帮助了我,但我确实需要找到并终止实际进程。 ps aux | grep screen 找到了 pid,我发出了 kill 来删除它。根据您在屏幕上运行的内容,您可能还需要清理临时文件和锁定。【参考方案6】:
screen -wipe

应该清除所有屏幕会话。

【讨论】:

死了是什么意思?没有运行任何程序? @ShihaoXu Dead 表示会话无法访问并且在本地主机上(套接字连接断开)。 - 见gnu.org/software/screen/manual/screen.html【参考方案7】:

将此添加到您的~/.bashrc

alias cleanscreen="screen -ls | tail -n +2 | head -n -2 | awk 'print $1'| xargs -I screen -S  -X quit"

然后使用cleanscreen 清理所有屏幕会话。

【讨论】:

一个简单的单行:screen -ls | grep Detached | cut -d. -f1 | awk 'print $1' | xargs kill 工作得很好,但必须稍微修改一下才能在 OSX 上工作:screen -ls | tail +2 | head -2 | awk 'print $1'| xargs -I screen -S -X quit 略有改进:-screen -ls |附上grep |切-d。 -f1 | awk '打印 $1' | xargs -I 屏幕 -d 【参考方案8】:

对我来说很简单

exit

有效。这是来自屏幕会话。

【讨论】:

还有,ctrl+a :quit 还有,ctrl+a,然后是K 或者只是在屏幕上按 CTRL+D【参考方案9】:

要杀死所有个分离的屏幕会话,在你的.bash_profile中包含这个函数:

killd () 
for session in $(screen -ls | grep -o '[0-9]\5\')
do
screen -S "$session" -X quit;
done

要运行它,请致电killd

【讨论】:

有时不是 5 位数,所以我使用:killd () for session in $(screen -ls | grep -o '[0-9]\+') do screen -S "$ 会话" -X 退出;完成【参考方案10】:
== ISSUE THIS COMMAND
[xxx@devxxx ~]$ screen -ls


== SCREEN RESPONDS
There are screens on:
        23487.pts-0.devxxx      (Detached)
        26727.pts-0.devxxx      (Attached)
2 Sockets in /tmp/uscreens/S-xxx.


== NOW KILL THE ONE YOU DONT WANT
[xxx@devxxx ~]$ screen -X -S 23487.pts-0.devxxx kill


== WANT PROOF?
[xxx@devxxx ~]$ screen -ls
There is a screen on:
        26727.pts-0.devxxx      (Attached)
1 Socket in /tmp/uscreens/S-xxx.

【讨论】:

那不是只是删除套接字,而不是杀死它后面的进程吗? 从创建僵尸进程的角度来看,这种方法是否有风险?【参考方案11】:

或者,在屏幕会话中,您只需键入 exit

这将终止屏幕启动的 shell 会话,从而有效地终止您正在使用的屏幕会话。

无需担心屏幕会话 ID 等。

【讨论】:

以上是关于杀死分离的屏幕会话[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Emacs shell 中的屏幕:如何分离?

如何在不重新加入会话的情况下检查屏幕会话的进度?

在 Theano 中使用屏幕会话 - 竞争条件

从另一个屏幕会话中启动屏幕会话

如何强制从另一个 SSH 会话中分离屏幕?

使用“SupressWhenMinimzed”安全关闭 RDP 会话后,远程计算机的屏幕分辨率发生变化