Как завершить сессию Linux screen

LinuxBeginner
Практиковаться сейчас

Введение

Этот учебник предоставит обзор основ Linux Screen, мощного терминального мультиплексора (terminal multiplexer), который позволяет создавать, управлять и перемещаться между несколькими терминальными сессиями в пределах одного окна. Вы узнаете, как запускать, отсоединять и повторно подключаться к сессиям Screen, а также изучите практическое применение этого универсального инструмента.

Понимание основ Linux Screen

Linux Screen — это мощный терминальный мультиплексор (terminal multiplexer), который позволяет создавать, управлять и перемещаться между несколькими терминальными сессиями в пределах одного окна. Он предоставляет способ запускать несколько команд или приложений одновременно, поддерживать их работу в фоновом режиме и плавно переключаться между ними.

Одним из основных вариантов использования Linux Screen является обеспечение постоянных сессий (persistent sessions). Это означает, что вы можете запустить длительный процесс, отсоединиться от сессии и позже повторно подключиться к ней, даже из другого места или с другого устройства. Это особенно полезно для таких задач, как удаленное управление сервером, запуск автоматизированных скриптов или поддержание длительных процессов, которые не должны прерываться.

Еще одной ключевой особенностью Linux Screen является его способность поддерживать общие сессии (shared sessions). Это позволяет нескольким пользователям подключаться к одной и той же сессии Screen, обеспечивая совместную работу и удаленную помощь. Это может быть особенно полезно в сценариях, когда нескольким членам команды необходимо работать над одним и тем же проектом или совместно устранять проблему.

Чтобы продемонстрировать основное использование Linux Screen, давайте начнем новую сессию Screen. Откройте свой терминал и введите следующую команду:

screen

Теперь вы находитесь внутри новой сессии Screen. Вы можете понять, что находитесь в сессии Screen, потому что терминал может выглядеть немного иначе, или вы можете увидеть приветственное сообщение.

Теперь давайте выполним простую команду внутри этой сессии Screen. Мы будем использовать команду top, чтобы увидеть запущенные процессы.

top

Вы должны увидеть вывод top, отображающий системные процессы.

top - HH:MM:SS up  X days, HH:MM,  X users,  load average: X.XX, X.XX, X.XX
Tasks: XXX total,   X running, XXX sleeping,   X stopped,   X zombie
%Cpu(s):  X.X us,  X.X sy,  X.X ni, XX.X id,  X.X wa,  X.X hi,  X.X si,  X.X st
MiB Mem :  XXXX.X total,  XXXX.X free,   XXX.X used,  XXXX.X buff/cache
MiB Swap:     0.0 total,     0.0 free,     0.0 used.  XXXX.X avail Mem

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
   XXXX labex     20   0  XXXXXX  XXXXX  XXXXX S   X.X   X.X   X:XX.XX top
   XXXX labex     20   0  XXXXXX  XXXXX  XXXXX S   X.X   X.X   X:XX.XX zsh
   ...

Чтобы выйти из команды top, нажмите q.

Теперь давайте отсоединимся от этой сессии Screen. Это оставит сессию работающей в фоновом режиме. Чтобы отсоединиться, нажмите Ctrl+A, а затем d.

Ctrl+A, d

Вы должны увидеть сообщение, указывающее на то, что вы отсоединились от сессии Screen.

[detached from ...]
Illustration of detaching from Screen session

Теперь вы вернулись в свою исходную терминальную сессию. Сессия Screen с командой top (из которой вы вышли) все еще работает в фоновом режиме.

Просмотр списка и повторное подключение к сессиям Screen

Теперь, когда вы отсоединились от сессии Screen, давайте узнаем, как просмотреть список запущенных сессий и повторно подключиться к одной из них.

Чтобы просмотреть список всех запущенных сессий Screen, используйте команду screen -ls в своем терминале.

screen -ls

Вы должны увидеть вывод, подобный этому, показывающий вашу отсоединенную сессию:

There is a screen on:
        XXXXX.pts-X.labex       (Detached)
X Sockets in /run/screen/S-labex.

Вывод показывает идентификатор сессии (session ID) (например, XXXXX.pts-X.labex) и ее статус (Detached).

Чтобы повторно подключиться к последней отсоединенной сессии Screen, используйте команду screen -r.

screen -r

Теперь вы должны снова находиться внутри своей сессии Screen. Поскольку вы вышли из top на предыдущем шаге, вы, вероятно, увидите стандартное приглашение терминала (terminal prompt) внутри сессии Screen.

Illustration of reattaching to Screen session

Если у вас запущено несколько сессий Screen, вы можете повторно подключиться к определенной сессии, указав ее идентификатор сессии (session ID) после команды screen -r. Например, если идентификатор сессии (session ID) равен 12345, вы бы использовали:

screen -r 12345

Для этой лабораторной работы, поскольку у вас, вероятно, только одна сессия, screen -r будет достаточно.

Теперь, когда вы вернулись в сессию Screen, давайте выйдем из нее правильно. Вы можете сделать это, набрав exit внутри сессии Screen.

exit

Это завершит сессию Screen и вернет вас в ваш исходный терминал.

Вы можете убедиться, что сессия закрыта, снова просмотрев список сессий Screen:

screen -ls

Вы должны увидеть вывод, указывающий на то, что нет запущенных сессий Screen:

No Sockets in /run/screen/S-labex.
Output showing no running sessions

Завершение сессии Screen

На предыдущем шаге вы узнали, как выйти из сессии Screen изнутри сессии, используя команду exit. Однако могут быть случаи, когда вам нужно завершить сессию Screen извне сессии, например, если сессия не отвечает или вы просто хотите закрыть ее, не переподключаясь.

Чтобы завершить определенную сессию Screen из вашего исходного терминала, вы можете использовать команду screen -X -S [session_id] quit. Вам понадобится идентификатор сессии (session ID), который вы можете получить с помощью screen -ls.

Сначала давайте запустим новую сессию Screen, чтобы у нас была сессия для завершения.

screen

Теперь отсоединитесь от этой сессии, используя Ctrl+A, d.

Ctrl+A, d

Перечислите запущенные сессии, чтобы получить идентификатор сессии (session ID).

screen -ls

Запишите идентификатор сессии (session ID) из вывода (например, XXXXX.pts-X.labex).

Теперь используйте команду screen -X -S [session_id] quit, чтобы завершить сессию. Замените [session_id] фактическим идентификатором, который вы записали.

screen -X -S XXXXX.pts-X.labex quit

Вы не должны увидеть никакого вывода, если команда выполнена успешно.

Чтобы подтвердить, что сессия была завершена, снова перечислите сессии Screen.

screen -ls

Вы должны увидеть вывод, указывающий на то, что нет запущенных сессий Screen.

No Sockets in /run/screen/S-labex.

Этот метод полезен для принудительного завершения сессии Screen, когда вы не можете получить к ней прямой доступ.

Illustration for terminating Screen session

Итог

Linux Screen — ценный инструмент для управления и поддержания постоянных терминальных сессий (persistent terminal sessions). Понимая, как создавать, отсоединять, перечислять, повторно подключать и завершать сессии Screen, вы можете запускать длительные процессы (long-running processes), сотрудничать с членами команды и гарантировать, что ваши критические задачи продолжат выполняться, даже если вы не подключены напрямую к терминалу. Этот учебник охватил основные концепции и практические примеры использования Linux Screen, предоставив вам знания для повышения вашей производительности и оптимизации рабочих процессов на основе терминала.