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


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.