Убить отдельный сеанс экрана [закрыто]

864

Я откуда-то узнал, что отдельный экран может быть убит

screen -X -S [session # you want to kill] kill

откуда можно получить [сеанс #, который вы хотите убить]

screen -ls

Но это не работает. Ничего плохого? Какой правильный путь?

Тим
источник
25
«где-то» не всегда является хорошим источником информации. Попробуйте "экран человека".
InnaM
27
Правильная командаscreen -S sessionname -p 0 -X quit
джимметрия
killall - # screen [# = количество экранов, которые вы хотите убить]
CArnold
Я просто использую выход
TPArrow
CTRL + D, когда на экране самая легкая команда.
Дон Кинг

Ответы:

1267

«kill» убьет только одно окно экрана. Чтобы «убить» весь сеанс, используйте quit.

пример

$ screen -X -S [session # you want to kill] quit

Для неактивных сеансов используйте: $ screen -wipe

InnaM
источник
112
наберите 'exit' (без кавычек) в Ubuntu: P
mzalazar
16
exitработает, но должен быть введен в каждый экран, который был открыт. quitдаже не работает
Капад
4
@kapad на самом деле бросает работу, если вы пишете это в строке -X -S pid / sockname quit
Эдуард
20
на OSX вход screen -X quitна любом терминале прекращает все активные сессии
Мишель
5
Ctrl + D также работает
Yi Xin
499

Вы можете убить отдельный сеанс, который не отвечает в сеансе экрана, выполнив следующие действия.

  1. Введите, screen -listчтобы идентифицировать отдельный сеанс экрана.

    $ screen -list  
        Есть экраны на:  
             20751.Melvin_Peter_V42 (отдельно)  
    

    Примечание: 20751.Melvin_Peter_V42это идентификатор вашей сессии.

  2. Присоединяйтесь к сеансу отсоединенного экрана

    screen -r 20751.Melvin_Peter_V42
  3. После подключения к сеансу нажмите Ctrl+, Aзатем введите:quit

Мелвин Питер
источник
20
Вы можете просто использовать screen -r 20751 без полного имени
Gal Bracha
53
или: Ctrl + a, k
laffuste
Комментарий @laffuste работал для меня, но quitи :quitпривел к тому, что command not foundна моем удаленном сервере Linux (возможно, виноваты различия между версиями ОС или экрана)
Hack-R
однажды прикрепленный к экрану, exitтоже работает
PankajKabra
145

Список экранов:

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
nilloc
источник
1
'screen -ls' также работает. ;)
Атул Вайбхав
113

Проще убить сеанс, когда ему дается какое-то значимое имя:

//Creation:
screen -S some_name proc
// Kill detached session
screen -S some_name -X quit
Hitman_99
источник
Почему screen -Sи нет screen -r?
43Tesseracts
1
В этом ответе используется имя сеанса, что намного удобнее, чем поиск идентификатора. Благодарю вас!
Пол Кенджора
43

Вы можете просто перейти к месту, где проходит сеанс экрана, и запустить:

 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.

И просто удали это:

  1. cd / tmp / uscreens / S-xxx
  2. Ls
  3. 26727.pts-0.devxxx
  4. rm 26727.pts-0.devxxx
  5. Ls

В uscreensкаталоге больше не будет 26727.pts-0.devxxxфайла. Теперь, чтобы убедиться, просто введите это:

screen -ls

и вы должны получить:

В / tmp / uscreens / S-xxx сокеты не найдены.

rc2012
источник
4
Это единственное решение, которое будет работать, если экран «завис», т.е. не мертвый, но не может быть привязан к.
Redreinard
Это помогло мне, когда экран был полностью заблокирован, но мне также нужно было найти и убить сам процесс. ps aux | grep screenнашел пид и я выдал его killудалить. В зависимости от того, что у вас было на экране, у вас также могут быть временные файлы и блокировки для очистки.
Ломки
29
screen -wipe

Должны очистить все мертвые сеансы экрана.

Вишв Джит
источник
11
Что значит мертвый? не работает какая-либо программа?
Шихао Сюй
1
@ShihaoXu Dead означает, что сеанс недоступен и находится на локальном хосте (соединение с сокетом разорвано). - см gnu.org/software/screen/manual/screen.html
iBaff
23

добавьте это к вашему ~/.bashrc:

alias cleanscreen="screen -ls | tail -n +2 | head -n -2 | awk '{print $1}'| xargs -I{} screen -S {} -X quit"

Затем используйте cleanscreenдля очистки всего сеанса экрана.

user2115803
источник
11
Простой однострочник:screen -ls | grep Detached | cut -d. -f1 | awk '{print $1}' | xargs kill
Ариэль
3
Работал, но пришлось немного изменить его для работы на OSX: screen -ls | tail +2 | head -2 | awk '{print $1}'| xargs -I{} screen -S {} -X quit
Джонатан
Небольшое улучшение: -screen -ls | grep прилагается | вырезать -f1 | awk '{print $ 1}' | xargs -I {} screen -d {}
Абхай Ядав,
21

Для меня простой

exit

работает. Это из сеанса экрана.

Ник Дезаульнье
источник
2
также ctrl + a:quit
Ник Desaulniers
2
также, ctrl + a, затем K
Ник
Или просто CTRL + D на экране
Фредерик Витте
16

Чтобы убить все отдельные сеансы экрана, включите эту функцию в ваш файл .bash_profile:

killd () {
for session in $(screen -ls | grep -o '[0-9]\{5\}')
do
screen -S "${session}" -X quit;
done
}

запустить его, позвони killd

Роза Перроне
источник
5
Иногда это не 5 цифр, поэтому я использую: killd () {для сеанса в $ (screen -ls | grep -o '[0-9] \ +') do screen -S "$ {session}" -X quit; сделано}
Константин
7
== 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.
duggi
источник
Разве это не удалит сокет, не уничтожит процесс, стоящий за ним?
Мартин С.
Является ли этот метод рискованным с точки зрения создания зомби-процессов?
Федир Рыхтик
5

В качестве альтернативы, во время сеанса экрана все, что вам нужно сделать, это набрать команду exit

Это уничтожит сеанс оболочки, инициируемый экраном, что фактически завершит сеанс экрана, на котором вы находитесь.

Не нужно беспокоиться об идентификаторе сеанса экрана и т. Д.

dat789
источник