When I execute screen -ls
, I see the following. How can I kill all the detached sessions?
There are screens on:
84918.tty
screen -ls | grep pts | cut -d. -f1 | awk '{print $1}' | xargs kill
Kill only Detached screen sessions (credit @schatten):
screen -ls | grep Detached | cut -d. -f1 | awk '{print $1}' | xargs kill
Include this function in your .bash_profile:
killd () {
for session in $(screen -ls | grep -o '[0-9]\{4\}')
do
screen -S "${session}" -X quit;
done
}
To run it, call killd
. This will kill all screen sessions, detached or not.
Combining Edward Newell's and Rose Perrone's solutions into a more readable and "screen" like solution.
Add below to your .bashrc
or .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,\}'
in case of
There is a screen on:
20505.blabla (03/05/2014 22:16:25) (Detached)
1 Socket in /var/run/screen/S-blabla.
will match both 20505 and 2014, where quitting 2014 will return "No screen session found."
[0-9]\{3,\}\.\S*
might work.
I've always encountered pattern 20505.name, where name is either host name or session name if screen was launched with -S flag. Works on OS X and Debian, might not be universal.
If the screens are dead, use:
screen -wipe
Here's a solution that combines all the answers: Add this to your .bashrc
or .bash_profile
:
killscreens () {
screen -ls | grep Detached | cut -d. -f1 | awk '{print $1}' | xargs kill
}
source .bashrc
to make killscreens
availableThanks to @Rose Perrone, @Milind Shah, and @schatten