убить сеанс экрана

66

Я пытаюсь убить сеанс экрана. Я заметил много других связанных вопросов, но ни один из этих ответов не работает для меня. Я пытаюсь убить следующую сессию:

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

Я должен нажать «контроль», а затем «контроль». Я делаю это, и ничего не происходит.

Еще одно решение - нажать Ctrl+ aи набрать: выйти. Однако, опять же, это ничего не делает. На самом деле, после нажатия control+ aабсолютно ничего не происходит, кроме сообщения «Нет другого окна»

JohnMerlino
источник
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
Это чтобы убить окно, а не сеанс
Эрик Ван
57

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

$ screen -ls

и затем выйдите из этого:

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

(-X = Выполнить команду, -S идентификатор сеанса для выполнения)

[ОБНОВИТЬ]

Пример:

screen -XS 20411 quit
shgnInc
источник
1
Это было довольно просто. Вы можете упростить его еще больше, комбинируя -X -S с -XS
AJ.
2
Вы должны отдать должное ответу innaM, если скопируете его
Martin Thoma
8

Это убьет все отключенные экраны:

экран -ls | grep отделен | вырезать -f1 | awk '{print $ 1}' | XARGS убивают

Это убьет все экраны, прикрепленные или отсоединенные

экран -ls | grep pts | вырезать -f1 | awk '{print $ 1}' | XARGS убивают
user324207
источник
7

Итак, со всеми этими официальными предложениями, давайте просто перейдем к чему-то более простому, столь же эффективному и более прямолинейному.

pkill screen

Кто хочет войти в неизвестный и ненужный экран, чтобы просто нажать пару команд, которые большинство из них едва ли помнят? Это позволяет вообще не углубляться в это и сразу убивает.

Плюс, если у вас их больше одного, это сделает их всех одним махом.

Брайан Томас
источник
1
Обратите внимание, что это убьет все запущенные экраны, которые могут или не могут быть тем, что вы хотите.
Миккель
Не очень хороший выбор. Я делал это в течение некоторого времени. Иногда это вызывает плохое поведение (например, выход из вашей учетной записи сразу). Кроме того, как упоминал @Mikkel, это может привести к закрытию всех ваших экранов, что не будет тем, что вы хотите. Иногда вам нужно продолжать запускать некоторые (например, некоторые из них выполняются системой) и останавливать некоторые другие экраны.
MAChitgarha
2

Я столкнулся с этой проблемой при обновлении экрана. screenКоманда будет зависать при попытке присоединить сеанс, независимо от того, сколько -Dи -Rя добавил к команде. Тем не менее, screen -lsудобно предоставляет pid сеанса, позволяя вам вмешиваться, используя следующее:

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 + \. Это ничего не делает для меня.

lizp
источник
1

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

Siddhant
источник
0

Нажмите Ctrl + D, чтобы убить окно экрана. Повторяйте это, пока вы не убьете все окна экрана. Как только у вас закончились все окна, экран будет прерван и завершится. Самое короткое решение, если у вас не много окон

Dilushan
источник