Screen
Überprüft den Fifo / Socket, wann immer er ein SIGCHLD
Signal empfängt . Wenn der Socket fehlt, wird er neu erstellt. Die Lösung besteht also darin, den Prozess zu finden und zu senden SIGCHLD
.
screen
Scheint auf meinem Debian-System als setgid, utmp
aber nicht als setuid installiert zu sein , so dass die erste Lösung aus den folgenden FAQ funktioniert hat:
$ kill -CHLD 30860
$ ls /var/run/screen/S-username/
30860.pts-4.localhost
Auf Systemen, auf denen screen setuid installiert ist root
, funktioniert dies nicht und Sie müssen einen der untergeordneten Prozesse der aktiven Bildschirmsitzung beenden, um den Kernel zu zwingen, das Signal für Sie zu senden. Dies bedeutet, dass Sie eines Ihrer Bildschirmfenster opfern müssen, um die Verbindung mit dem Rest wiederherzustellen (wählen Sie mit Bedacht aus!).
Aus einem archivierten Gentoo Wiki FAQ :
Sockel fehlt
Manchmal kann der Socket eines noch laufenden Bildschirms zerstört werden, obwohl der eigentliche Prozess und alle untergeordneten Prozesse noch ausgeführt werden. Bildschirm -Liste wird „No Sockets gefunden in / tmp / uscreens / ..“ angezeigt Einige handliche Anweisungen, wie aus diesem (und ein paar andere ungewöhnliche Probleme) bei sich erholen http://www4.informatik.uni-erlangen.de/ ~ jnweiger / screen-faq.html # MISC
ungefähr 2/3 des Weges nach unten.
F: Aus irgendeinem unbekannten Grund ist das FIFO in / tmp / screens / S-myname weg und ich kann meine Bildschirmsitzung nicht fortsetzen. Gibt es eine Möglichkeit, das FIFA neu zu erstellen?
A: Der Bildschirm überprüft den Fifo / Socket, wenn er ein SIGCHLD-Signal empfängt. Wenn es fehlt, wird das FIFO / Socket dann neu erstellt.
Wenn der Bildschirm ohne set-uid ausgeführt wird, kann der Benutzer kill -CHLD screenpid
direkt eine ausgeben
(dies ist -CHILD
auf einigen Systemen der Fall ). Screenpid ist die Prozess-ID des in einer ps -x
Auflistung gefundenen Bildschirmprozesses .
Normalerweise funktioniert dies jedoch nicht, da screen als setuid root installiert werden sollte. In diesem Fall können Sie kein Signal senden, der Kernel jedoch. Dies geschieht immer dann, wenn ein untergeordnetes Bildschirmelement seinen Status ändert. Suchen Sie die Prozess-ID (Shell-ID unten) der "am wenigsten wichtigen" Shell, die auf dem Bildschirm ausgeführt wird. Der Versuch kill -STOP shellpid
. Wenn der FIFO / Socket nicht wieder angezeigt wird, zerstören Sie den Shell-Prozess. Sie opfern eine Muschel, um den Rest zu retten. Wenn nichts funktioniert, vergessen Sie bitte nicht, alle Prozesse zu entfernen, die in der Sitzung für verlorene Bildschirme ausgeführt werden.