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


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


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

1
'screen -ls' также работает. ;)
Атул Вайбхав

113

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

//Creation:
screen -S some_name proc
// Kill detached session
screen -S some_name -X quit

Почему 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 сокеты не найдены.


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для очистки всего сеанса экрана.


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 {}
Абхай Ядав,


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.

Разве это не удалит сокет, не уничтожит процесс, стоящий за ним?
Мартин С.

Является ли этот метод рискованным с точки зрения создания зомби-процессов?
Федир Рыхтик

5

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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.