Как подключиться к потерянному экрану (отсоединенный, отсутствующий сокет)?

Я screen сеанс на домашний сервер. Моя рабочая станция нуждалась в перезагрузке, поэтому я отсоединил и убил терминал. При повторном подключении к серверу, я выполняю свой типичный

$ screen -D -R
[new screen]

да? Нет, не новый сеанс, дай мне старый. Я знаю, я возьму его прямо сейчас. Как называется разъем?

$ screen -list
No Sockets found in /var/run/screen/S-username

$ ls -a /var/run/screen/S-username
.  ..

подождать... что? Я знаю, что оставил его включенным. Куда она делась?

$ ps -ef | grep -i screen
username  30860     1  0 Oct16 ?        00:00:29 SCREEN

Ну, есть процесс. Но там нет розетки, чтобы перейти к screen -r. Как я могу подключиться к сеансу?

19
задан quack quixote
20.11.2022 18:15 Количество просмотров материала 2527
Распечатать страницу

1 ответ

Screen проверяет ФИФО/гнездо всякий раз, когда он получает SIGCHLD сигнал. если сокет отсутствует, он будет воссоздан. таким образом, решение состоит в том, чтобы найти процесс и отправить его SIGCHLD.

в моей системе Debian,screen по-видимому, устанавливается как setgid utmp но не setuid, поэтому первое решение из FAQ ниже работало:

$ kill -CHLD 30860
$ ls /var/run/screen/S-username/
30860.pts-4.localhost

в системах, где установлен экран setuid root, это не сработает, и вам нужно будет убить одного из дочерние процессы активного сеанса экрана заставляют ядро посылать сигнал за вас. Это означает жертвовать одним из ваших окон экрана, чтобы восстановить связь с остальными (выбирайте мудро!).

С архив Gentoo Wiki FAQ:

Гнездо Отсутствует

иногда сокет неподвижного экрана может быть уничтожен, хотя сам процесс и все его дочерние процессы бегущий. экран-список будет отображать " сокеты не найдены в /tmp/uscreens/.." Некоторые удобные инструкции для восстановления после этого (и несколько другие редкие проблемы) в http://www4.informatik.uni-erlangen.de/~jnweiger/экран-часто задаваемые вопросы.сообщение: смешанная около 2/3 пути вниз.

Q: по какой-то неизвестной причине fifo в /tmp/screens/S-myname пропал, и я не могу возобновить сеанс экрана. Есть ли способ воссоздать fifo?

A: экран проверяет fifo / socket всякий раз, когда он получает сигнал SIGCHLD. Если отсутствует, то fifo / сокет воссоздается.

если экран работает без set-uid пользователь может оформить kill -CHLD screenpid напрямую (это -CHILD на некоторых системный.) Screenpid процесс-идентификатор процесса, экране найден в ps -x листинг.

но обычно это не работает, так как на экране должен быть установлен setuid root. В этом случае вы не сможет послать ему сигнал, но ядро будет. Это происходит всякий раз, когда дочерний элемент экрана меняет свое состояние. Находить идентификатор процесса (shellpid ниже) "наименее важной" запущенной оболочки внутренний экран. The try kill -STOP shellpid. Если fifo / гнездо не появляется, уничтожает процесс оболочки. Вы жертвуете одной оболочкой, чтобы спасти остальной. Если ничего не работает, пожалуйста, не забудьте удалить все процессы запуск в сеансе потерянного экрана.

27
отвечен quack quixote 2022-11-22 02:03

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх