【问题标题】: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 是最简单的命令。

标签: linux kill gnu-screen


【解决方案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】:

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

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

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

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

  2. 附加到分离的屏幕会话

    screen -r 20751.Melvin_Peter_V42
  3. 连接到会话后,按 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.

然后删除它:

  1. cd /tmp/uscreens/S-xxx
  2. ls
  3. 26727.pts-0.devxxx
  4. rm 26727.pts-0.devxxx
  5. ls

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

screen -ls

你应该得到:

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

【讨论】:

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

应该清除所有屏幕会话。

【讨论】:

【解决方案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 等。

【讨论】:

    猜你喜欢
    • 2013-01-05
    • 1970-01-01
    • 2020-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-18
    • 1970-01-01
    相关资源
    最近更新 更多