杀死分离的屏幕会话[关闭]
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 中输入“退出”(不带引号):Pexit
有效,但需要在打开的每个屏幕中输入。 quit
甚至不起作用
@kapad 实际上退出工作如果你把它写成内联 -X -S pid/sockname quit
在 OSX 上,在任何终端上输入 screen -X quit
会终止所有活动会话
Ctrl + D 也可以【参考方案2】:
您可以通过执行以下操作来终止在屏幕会话中没有响应的分离会话。
键入 screen -list
以识别分离的屏幕会话。
注意: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 等。
【讨论】:
以上是关于杀死分离的屏幕会话[关闭]的主要内容,如果未能解决你的问题,请参考以下文章