当我执行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个套接字。
screen -ls | grep pts | cut -d. -f1 | awk '{print $1}' | xargs kill
仅杀死分离的屏幕会话(信用@schatten):
screen -ls | grep Detached | cut -d. -f1 | awk '{print $1}' | xargs kill
这是一个结合了所有答案的解决方案:将其添加到您的.bashrc
或.bash_profile
:
killscreens () {
screen -ls | grep Detached | cut -d. -f1 | awk '{print $1}' | xargs kill
}
source .bashrc
以使killscreens
可用感谢@Rose Perrone,@ Mirind Shah和@schatten
在.bash_profile中包含此函数:
killd () {
for session in $(screen -ls | grep -o '[0-9]\{4\}')
do
screen -S "${session}" -X quit;
done
}
要运行它,请调用killd
。这将终止所有屏幕会话,分离与否。
如果屏幕已死,请使用:
screen -wipe
将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
}
'[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,其中如果使用-S标志启动屏幕,则name是主机名或会话名称。适用于OS X和Debian,可能不是通用的。