Screen
sprawdza fifo / gniazdo za każdym razem, gdy odbiera SIGCHLD
sygnał. Jeśli brakuje gniazda, zostanie ono odtworzone. Rozwiązaniem jest znalezienie procesu i wysłanie go SIGCHLD
.
W moim systemie Debian screen
wydaje się być zainstalowany jako setgid, utmp
ale nie setuid, więc pierwsze rozwiązanie z FAQ poniżej działało:
$ kill -CHLD 30860
$ ls /var/run/screen/S-username/
30860.pts-4.localhost
W systemach, w których screen jest zainstalowany setuid root
, to nie zadziała i będziesz musiał zabić jeden z procesów potomnych aktywnej sesji screena, aby zmusić jądro do wysłania za ciebie sygnału. Oznacza to poświęcenie jednego z okien ekranu, aby połączyć się z resztą (wybierz mądrze!).
Z archiwum FAQ Gentoo Wiki :
Brak gniazda
Czasami gniazdo wciąż działającego ekranu może zostać zniszczone, chociaż aktualny proces i wszystkie jego procesy potomne są nadal uruchomione. screen -list wyświetli komunikat „Nie znaleziono gniazd w / tmp / uscreens / ..” Kilka przydatnych instrukcji, jak odzyskać to (i kilka innych nietypowych problemów) na stronie http://www4.informatik.uni-erlangen.de/ ~ jnweiger / screen-faq.html # MISC
około 2/3 drogi w dół.
P: Z nieznanego powodu zniknęło fifo w / tmp /screen / S-myname i nie mogę wznowić sesji ekranowej. Czy istnieje sposób na odtworzenie FIFO?
Odp .: Ekran sprawdza fifo / gniazdo za każdym razem, gdy odbiera sygnał SIGCHLD. Jeśli go nie ma, odtworzone zostanie fifo / socket.
Jeśli screen działa bez ustawionego identyfikatora użytkownika, użytkownik może wydać
kill -CHLD screenpid
bezpośrednio ( -CHILD
w niektórych systemach). Screenpid to identyfikator procesu screen znajdujący się na ps -x
liście.
Ale zazwyczaj to nie działa, ponieważ screen powinien być zainstalowany jako setuid root. W takim przypadku nie będziesz mógł wysłać mu sygnału, ale jądro to zrobi. Robi to za każdym razem, gdy dziecko ekranu zmienia swój stan. Znajdź identyfikator procesu (shellpid poniżej) „najmniej ważnej” powłoki działającej na ekranie. Próba kill -STOP shellpid
. Jeśli fifo / socket nie pojawi się ponownie, zniszcz proces powłoki. Poświęcasz jedną skorupę, aby uratować resztę. Jeśli nic nie działa, nie zapomnij usunąć wszystkich procesów działających w sesji utraconego ekranu.