当我执行screen -ls
时,我会看到以下内容。我如何杀死所有分离的会话?
屏幕上有:
84918.ttys002.ros-mbp (Detached) 84944.ttys008.ros-mbp (Detached) 84970.ttys013.ros-mbp (Attached) 84998.ttys002.ros-mbp (Detached) 85024.ttys002.ros-mbp (Detached)
/var/folders/86/062qtcyx2rxbnmn8mtpkyghs0r0r_z/T/.screen中的5个套接字。
答案 0 :(得分:78)
screen -ls | grep pts | cut -d. -f1 | awk '{print $1}' | xargs kill
杀掉仅分离屏幕会话(credit @schatten):
screen -ls | grep Detached | cut -d. -f1 | awk '{print $1}' | xargs kill
答案 1 :(得分:24)
这是一个结合了所有答案的解决方案:将其添加到.bashrc
或.bash_profile
:
killscreens () {
screen -ls | grep Detached | cut -d. -f1 | awk '{print $1}' | xargs kill
}
source .bashrc
以使killscreens
可用感谢@Rose Perrone,@ Mirind Shah和@schatten
答案 2 :(得分:8)
在.bash_profile中包含此功能:
killd () {
for session in $(screen -ls | grep -o '[0-9]\{4\}')
do
screen -S "${session}" -X quit;
done
}
要运行它,请致电killd
。这将终止所有屏幕会话,分离与否。
答案 3 :(得分:1)
如果屏幕已关闭,请使用:
screen -wipe
答案 4 :(得分:1)
将Edward Newell和Rose Perrone的解决方案组合成更具可读性和“屏幕”风格的解决方案。
在下方添加到您的.bashrc
或.bash_profile
中。
# function for killing all detached screen sessions
killds() {
detached_sessions=$(screen -ls | grep Detached | cut -d. -f1 | awk '{print $1}')
for s in ${detached_sessions}
do
screen -S "${s}" -X quit;
done
}
答案 5 :(得分:0)
'[0-9]\{3,\}'
的情况
There is a screen on:
20505.blabla (03/05/2014 22:16:25) (Detached)
1 Socket in /var/run/screen/S-blabla.
将匹配20505和2014年,退出2014将返回“未找到屏幕会话。”
[0-9]\{3,\}\.\S*
可能有用。
我一直遇到模式20505. name ,其中 name 是主机名或会话名称,如果使用-S标志启动了屏幕。适用于OS X和Debian,可能不是通用的。