screen - это терминальный мультиплексор позволяющий работать с множеством сеансов терминала из одного инстанса терминала с разделением терминала на регионы и последующей эмуляцией терминала в каждом таком регионе.
Это полезно если нужно визуально отслеживать какие-то real-time данные из нескольких терминалов (эмуляций терминалов).
Так же при помощи reptyr можно направить вывод сервиса systemd в терминал сеанса screen и наблюдать вывод. Затем можно открепить сеанс screen и закрыть терминал, при этом сервис systemd продолжит свою работу.
Ссылка на по-русски про детальное описание screen
Сеанс (терминальная сессия) - среда для работы с сервером. Проще - инстанс терминала.
В самом простом случае для создания нового сеанса необходимо:
$ screen
После чего будет приветсвенное сообщение программы, где нужно нажать space
или enter
.
Можно создать именованный сеанс (name
- произвольное имя на латинице):
$ screen -S name
Просмотр списка сеансов:
$ screen -ls
There are screens on:
5811.test2 (22.07.2021 09:51:25) (Detached)
5794.test1 (22.07.2021 09:51:17) (Attached)
5582.pts-0.byurrer-Lenovo-G580 (22.07.2021 09:44:20) (Detached)
3 Sockets in /run/screen/S-byurrer.
В каждом сеансе
screen
работают горячие клавиши, которые начинаются сCtrl+a
.
Несколько горячих клавиш управления сеансом:
d
- открепить текущий сеанс?
- просмотр всех команд и горячих клавиш screen
(в терминале Ubuntu 21.04 не работает)c
- очистить экран:
- ввод команды screen
:
kill
- уничтожить текущий сеансhelp
- просмотр всех команд и горячих клавиш screen
Сеансы могут быть в 3 состояниях:
detached
- сеанс запущен, но не прикреплен к терминалуattached
- сеанс запущен, прикреплен к терминалу и ожидает вводdead
- сеанс некорректно завершен, например при помощи kill -9
Перейти в detached
сеанс (PID
- pid
процесса или название сеанса):
$ screen -r PID
Попытка перейти на attached
сеанс закончится провалом:
$ screen -r test1
There is a screen on:
5794.test1 (22.07.2021 09:51:17) (Attached)
There is no screen to be resumed matching test1.
Все потому что процесс сеанса используется клиентом и ожидает ввод. Для того чтобы подключится к attached
сеансу нужно его открепить (сделать detached
):
$ screen -d PID
Теперь можно прикрепиться к сеансу. Но можно открепить и прикрепить сеанс в одной команде так:
$ screen -rD PID
Уничтожить сеанс можно через команду kill
, в этом случае произойдет уничтожение процесса и сеанса screen
:
$ kill PID
Уничтожение процесса через kill -9
приведет к тому, что уничтожаемый сеанс останется в списке сеансов screen
, но будет со статусом dead
, это происходит по той причине что kill -9
не дает процессу самостоятельно завершится, а уничтожает его принудительно (сигнал SIGKILL
не может быть обработан уничтожаемым процессом). Продробнее про kill vs kill -9.
$ kill -9 7117
$ screen -ls
There is a screen on:
7117.test (21.07.2021 20:43:26) (Dead ???)
Remove dead screens with 'screen -wipe'.
1 Socket in /run/screen/S-byurrer.
После kill -9
сеанс нужно очистить следующим образом:
$ screen -wipe PID
Каждый сеанс позволяет разделять терминал на несколько регионов, но это вовсе необязательно, можно переключаться между сеансами в однорегиональном режиме.
Команды screen
(Ctrl + a + :
) для работы с регионами:
split
- разделить окно по горизонталиsplit -v
- разделить окно по вертикалиremove
- закрыть текущий регионПри создании регионы по умолчанию пустые, для ввода команд терминала необходимо включить эмуляцию терминала в регионе.
Горячие клавишы для работы с регионами (Ctrl + a +
):
c
- эмуляция терминала в регионеw
- список окон сеанса"
- список окон сеанса с возможностью выбора для переходаp
- перейти на предыдущее окноn
- перейти на следующее окноtab
- переход между окнами в многоконном режиме