вбити екранну сесію


65

Я намагаюся вбити сеанс екрана. Я помітив багато інших пов'язаних питань, але жодна з цих відповідей не працює для мене. Я намагаюся вбити наступний сеанс:

screen -ls
There is a screen on:
    23520.pts-6.porkypig    (09/30/2013 02:49:47 PM)    (Detached)
1 Socket in /var/run/screen/S-root.

screen -r 23520.pts-6.porkypig

Зараз я на сесії. Відповідно до документації:

http://www.gnu.org/software/screen/manual/screen.html#Quit

Я повинен натиснути "control a", а потім "control \". Я роблю це, і нічого не відбувається.

Ще одне рішення сказало, щоб натиснути Ctrl+ aі ввести: вийти. Однак знову ж таки це нічого не робить. Насправді натискаючи control+ a, після цього абсолютно нічого не відбувається, окрім повідомлення "Без іншого вікна"


1
на екрані v4.x, щоб знищити всі сеанси,ps aux | grep "SCREEN" | awk '{print $2}' | xargs kill
Фредрік Гаус

2
Для запису ви можете просто зробити screen -r porkypigабо screen -r 23520, замість того, щоб включати повний рядок. Екранні назви повинні зробити речі простішими, а не складнішими.
Міккель

Відповіді:


73

спочатку вам потрібно знову приєднатись до екранного сеансу,
screen -r 23520як ви це зробили. Потім натисніть ctrl+, aа потім велику Kі натисніть, yколи він запитає, чи дійсно ви хочете вбити сеанс


2
Це працює, якщо є проблема з процесом, що працює всередині екрана, але не, якщо є проблема з самим екраном. Це так у 99% часу і має додаткову перевагу лише впливати на одне вікно всередині екрану, а не припиняти всі вікна.
Міккель

1
Це вбити вікно, а не сеанс
Ерік Ван

53

Ви можете залишити цей екран, не приєднуючись до нього. Спочатку знайдіть його сеанс:

$ screen -ls

а потім киньте його:

$ screen -XS [session # you want to quit] quit

(-X = Виконати команду, -S PID сеансу для запуску)

[ОНОВЛЕННЯ]

Приклад:

screen -XS 20411 quit

1
Це було досить просто. Ви можете ще більше спростити його, комбінуючи -X -S з -XS
AJ.

2
Ви повинні надати відповідь innaM, якщо скопіюєте її
Мартін Тома

8

Це знищить усі відокремлені екрани:

екран -лс | греп відсторонений | вирізати -d. -f1 | awk '{print $ 1}' | xargs вбивають

Це знищить усі екрани, приєднані чи відірвані

екран -лс | grep pts | вирізати -d. -f1 | awk '{print $ 1}' | xargs вбивають

7

Тож, з усіма цими офіційними пропозиціями, давайте просто підемо на щось простіше та настільки ж ефективне та якесь більш прямого.

pkill screen

Хто хоче зайти на невідомий і непотрібний екран, щоб просто натиснути пару команд, які більшість може ледве запам'ятати? Це уникає взагалі вникати в нього і вбиває його відразу.

Плюс, якщо у вас є більше одного, це займе їх одним махом.


1
Зауважте, що це знищить усі запущені екрани, які можуть бути або не бути такими, які ви хочете.
Міккель

Не вдалий вибір. Я займаюся цим вже деякий час. Іноді це спричиняє погану поведінку (наприклад, негайно вийти з облікового запису користувача). Також, як згадував @Mikkel, це може призвести до закриття всіх екранів, що було б не тим, що ви хочете. Іноді вам потрібно продовжувати працювати (наприклад, деякі працюють за системою) та зупиняти деякі інші екрани.
MAChitgarha

2

Я зіткнувся з цією проблемою під час оновлення екрана. screenКоманда буде зависати при спробі приєднати сеанс, незалежно від того, скільки -Dі -Rя додав до команди. Однак screen -lsзручно надає розголос сеансу, дозволяючи втрутитися, використовуючи наступне:

10:42 user ~ $ screen -ls
There is a screen on:
        5730.my_screen     (Detached)
1 Socket in /tmp/screens/S-user.

10:42 user ~ $ sudo kill 5730

10:43 user ~ $ screen -ls
No Sockets found in /tmp/screens/S-user.

(Це схоже на відповідь Брайана Томаса, але він знищить усі запущені екранні сесії, що може бути не тим, що ви хочете, якщо у вас відкрито кілька екранів, але лише один неправильний поведінка.)


Після 6 годин розбиття голови в Інтернеті ... твоя була єдиною відповіддю, яка спрацювала. Дякую, друже!
kRazzy R

1

Як і ви, я хотів вбити сеанс свого екрана і вважав, що документація не є корисною. Переконавшись в тому, що має бути поєднання клавіш, я виявив , що
ctrl + aто \
працює

Тоді я отримую підказку: "Дійсно закрий і вбий усі свої вікна [y \ n]"

Я не впевнений, чому документація говорить ctrl + aтоді ctrl + \. Це нічого не робить для мене.


1

Ви можете знайти ідентифікатор процесу доданого запущеного екрану. Я виявив це таким же, як ідентифікатор сеансу, який ви можете отримати командою:
screen -ls
І ви можете використовувати наступну команду, щоб вбити цей процес:
kill [sessionId]або
sudo kill [sessionId]
Ви можете вбити екран, навіть якщо він встановлений у якомусь іншому вікні терміналу.


0

Натисніть ctrl + d, щоб увімкнути вікно екрана. Повторіть це, поки не вб'єте всі вікна екрана. Після того, як у вас закінчиться всі вікна, екран закриє сеанс і закінчується. Найкоротше рішення, якщо у вас мало вікон

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.