Убити сеанс окремого екрана [закрито]


864

Я десь дізнався, що відокремлений екран може бути вбитий

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

звідки [сеанс # ви хочете вбити] можна отримати

screen -ls

Але це не працює. Щось не так? Який правильний спосіб?


25
"десь" не завжди є хорошим джерелом інформації. Спробуйте "man screen".
innaM

27
Правильна командаscreen -S sessionname -p 0 -X quit
jimmetry

killall - # екран [# = кількість екранів, яких потрібно вбити]
CArnold

Я просто використовую вихід
TPArrow

CTRL + D, коли на екрані - це найпростіша команда.
Дон Кінг

Відповіді:


1267

"убивати" вбиватиме лише одне вікно екрана. Щоб "вбити" повний сеанс, використовуйте quit.

Приклад

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

Для мертвих сеансів використовуйте: $ screen -wipe


112
введіть 'exit' (без лапок) у ubuntu: P
mzalazar

16
exitпрацює, але його потрібно набрати в кожен відкритий екран. quitнавіть не працює
kapad

4
@kapad фактично перестає працювати, якщо ви напишете його inline -X -S pid / sockname кинути
Eduard

20
на OSX вхід screen -X quitна будь-який термінал припиняє всі активні сесії
Мішель

5
Ctrl + D також працює
Yi Xin

499

Ви можете вбити відокремлений сеанс, який не відповідає на екрані, виконавши наступне.

  1. Введіть, screen -listщоб ідентифікувати сеанс окремого екрана.

    ~ $ екран-список  
        Є екрани на:  
             20751.Melvin_Peter_V42 (окремо)  
    

    Примітка: 20751.Melvin_Peter_V42ваш ідентифікатор сеансу.

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

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


20
ви можете просто використовувати екран -r 20751 без повного імені
Gal Bracha

53
або: Ctrl + a, k
laffuste

@laffuste коментар «s працював для мене, але 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?
43Тессеракти

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. лс
  3. 26727.pts-0.devxxx
  4. rm 26727.pts-0.devxxx
  5. лс

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
Джонатан

Невелике поліпшення: -екран -лс | grep Прикріплений | вирізати -d. -f1 | awk '{print $ 1}' | xargs -I {} екран -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 () {для сеансу в $ (екран -ls | grep -o '[0-9] \ +') робити екран -S "$ {session}" -X вийти; зроблено}
Костянтин

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.