У меня запущен сеанс экрана, который я хотел бы: выйти, но не могу, потому что, когда я пытаюсь повторно подключиться, я получаю сообщение об ошибке, говорящее, что он не может открыть мой терминал. Я уверен, что смогу убить демона или что-то в этом роде, но мне нужно узнать «правильный» способ, а также то, что на самом деле происходит.
daniel@DELIRIUM:~/server1/bin/plugins$ screen -list
There is a screen on:
1424.pts-0.DELIRIUM (06/23/2011 01:18:14 PM) (Detached)
1 Socket in /var/run/screen/S-daniel.
daniel@DELIRIUM:~/server1/bin/plugins$ screen -r 1424
Cannot open your terminal '/dev/pts/0' - please check.
Кроме того, что такое розетка? Чем больше вы сможете сделать это, тем лучше.
По какой-то причине у вас нет TTY. Ты использовал su
изменить на этого пользователя другого пользователя? Обычно TTY принадлежит человеку, который изначально входит в этот терминал.
Есть хитрый трюк, чтобы исправить это (кроме изменения разрешений для файла / dev / pts / 0 пользователем, который изначально вошел в систему), bsdutils
в пакете есть программа под названием script
который при запуске действует как кейлоггер, сохраняя и то, что вы набираете, и то, что печатают программы. Он запускает другую оболочку и выделяет другую псевдотерминал для этой оболочки, чтобы записать все это, поэтому, если вы запустите script /dev/null
он создаст новую псевдотерминал с соответствующими разрешениями и начнет записывать все на ней в / dev / null. После этого вы сможете использовать screen для повторного подключения сеанса.
Что касается «сокетов», это экранный термин для именованных файлов каналов (также известных как FIFO) в /var/run/screen/S-username
, например
prw------- 1 derf derf 0 Jun 23 22:42 30029.pts-0.server
Когда вы впервые запускаете экран, этот файл канала создается для подключения screen
процесс, который вы используете для просмотра дисплеев с фоном screen
процесс (обычно переименовывается SCREEN
) программы фактически выполняются. Когда вы запускаете screen -r
, запущенный процесс экрана открывает этот канал для взаимодействия с процессом фонового экрана.
Здесь происходит что-то странное. Не могли бы вы вставить вывод:
ls -l /dev/pts/0
id
Сокет в этом случае - это форма межпроцессного взаимодействия, это файл в файловой системе, который формирует канал между процессом и ... другими процессами. Итак, ваш экранный «клиент» обращается к другому запущенному экземпляру экрана, и вот как работает магия screen. Сокеты в Linux сбивают с толку, потому что традиционно люди думают, что слово сокет означает «сетевые сокеты». Эту концепцию сложно упростить, она вписывается в ряд других каналов межпроцессного взаимодействия, лучше всего объясняемых в книге «Расширенное программирование в среде UNIX».