Screen
перевіряє фіфо / розетку щоразу, коли отримує SIGCHLD
сигнал. Якщо розетка відсутня, вона буде відтворена. Тож рішення - знайти процес і надіслати його SIGCHLD
.
У моїй системі Debian, screen
схоже, встановлено як setgid, utmp
але не налаштовано, тому перше рішення із поширених запитань нижче працює:
$ kill -CHLD 30860
$ ls /var/run/screen/S-username/
30860.pts-4.localhost
У системах, де екран встановлений налаштовано root
, це не працюватиме, і вам потрібно буде вбити один з дочірніх процесів активного сеансу на екрані, щоб змусити ядро надсилати сигнал для вас. Це означає принести в жертву одне з ваших екранів, щоб знову з'єднатися з рештою (вибирайте з розумом!).
З архівованого FAQ Gentoo Wiki :
Розетка відсутня
Іноді сокет все ще працюючого екрана може бути зруйнований, хоча власне процес і всі його дочірні процеси все ще працюють. на екрані-списку буде відображено "Не знайдено сокетів у / tmp / uscreens / .." Деякі зручні вказівки щодо відновлення після цього (та кількох інших незвичайних проблем) на веб- сайті http://www4.informatik.uni-erlangen.de/ ~ jnweiger / screen-faq.html # MISC
приблизно на 2/3 шляху вниз.
Питання: З незрозумілої причини файлу fifo в / tmp / екранах / S-імені немає, і я не можу відновити сеанс екрана. Чи є спосіб відтворити фіфо?
A: Екран перевіряє фіфо / сокет кожного разу, коли він отримує сигнал SIGCHLD. Якщо цього немає, то відтворюється фіфо / сокет.
Якщо екран працює без встановленого режиму, користувач може kill -CHLD screenpid
безпосередньо видати його
(він є -CHILD
в деяких системах). Screenpid - ідентифікатор процесу екранного процесу, знайденого у ps -x
списку.
Але зазвичай це не спрацює, оскільки на екрані повинен бути встановлений встановлений корінь. У цьому випадку ви не зможете надіслати йому сигнал, але ядро буде. Це робиться кожен раз, коли дитина, що перебуває на екрані, змінює свій стан. Знайдіть ідентифікатор процесу (shellpid нижче) "найменш важливої" оболонки, що працює на екрані. Спробу kill -STOP shellpid
. Якщо фіфо / розетка не з’являється знову, руйнуйте процес оболонки. Ви жертвуєте однією оболонкою, щоб зберегти решту. Якщо нічого не працює, не забудьте видалити всі процеси, запущені в сеансі втраченого екрана.