Ответ 1
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
Когда я выполняю 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)
5 Сокеты в /var/folders/ 86/062qtcyx2rxbnmn8mtpkyghs0r0r_z/T/.screen.
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
Здесь решение, которое объединяет все ответы: Добавьте это к .bashrc
или .bash_profile
:
killscreens () {
screen -ls | grep Detached | cut -d. -f1 | awk '{print $1}' | xargs kill
}
source .bashrc
, чтобы сделать killscreens
доступнымБлагодаря @Rose Perrone, @Milind 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
'[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. Работы на OS X и Debian могут быть не универсальными.