¿Cómo me reconecto a una pantalla perdida (desconectado, falta el socket)?

21

Tuve un screen sesión que se ejecuta en un servidor doméstico. Mi estación de trabajo necesitaba un reinicio, así que desconecté y maté la terminal. Al reconectarme al servidor, ejecuto mis típicas

$ screen -D -R
[new screen]

Eh No, no es una sesión nueva, dame la anterior. Lo sé, lo agarraré directamente. ¿Cuál es el nombre del zócalo?

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

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

¿Esperar lo? Sé que lo dejé corriendo. Donde se fue

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

Bueno, ahí está el proceso. Pero no hay zócalo para pasar screen -r. ¿Cómo puedo reincorporarme a mi sesión?

quack quixote
fuente

Respuestas:

27

Screen comprueba el fifo / socket cada vez que recibe un SIGCHLD señal. Si falta el zócalo, será recreado. Entonces la solución es encontrar el proceso y enviarlo. SIGCHLD.

En mi sistema Debian, screen Parece que se instala como setgid utmp pero no setuid, por lo que la primera solución de las preguntas frecuentes a continuación funcionó:

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

En sistemas donde se instala la pantalla setuid. root, esto no funcionará, y deberá matar uno de los procesos secundarios de la sesión de pantalla activa para forzar al kernel a enviar la señal por usted. Esto significa sacrificar una de las ventanas de su pantalla para reconectarse con el resto (¡elija sabiamente!).

Desde un Preguntas frecuentes archivadas de Gentoo Wiki :

Falta el zócalo

A veces se puede destruir el zócalo de una pantalla en ejecución,   aunque el proceso real y todos sus procesos secundarios todavía están   corriendo. pantalla-lista mostrará "No se encontraron sockets en / tmp / uscreens / .."   Algunas instrucciones útiles sobre cómo recuperarse de esto (y algunas   otros problemas poco comunes) en http://www4.informatik.uni-erlangen.de/~jnweiger/screen-faq.html#MISC alrededor de 2/3 del camino hacia abajo.

Q: Por alguna razón desconocida, el fifo en / tmp / screens / S-myname se ha ido,   y no puedo reanudar mi sesión de pantalla. ¿Hay alguna manera de recrear el fifo?

UNA: La pantalla comprueba el fifo / socket cada vez que recibe una señal SIGCHLD.   Si falta, se recrea el fifo / socket entonces.

Si la pantalla se está ejecutando no set-uid el usuario puede emitir un kill -CHLD screenpid directamente (es -CHILD en algunos   sistemas). Screenpid es el identificador de proceso del proceso de pantalla encontrado   en un ps -x listado.

Pero normalmente esto no funcionará, ya que la pantalla debe instalarse setuid root.   En este caso no podrá enviar una señal, pero el kernel   será. Lo hace, siempre que un niño de pantalla cambie su estado. Encontrar   el id de proceso (shellpid a continuación) del shell "menos importante" en ejecución   dentro de la pantalla El intento kill -STOP shellpid. Si el fifo / socket   No reaparece, destruye el proceso de shell. Sacrificas una cáscara para salvar.   el resto. Si nada funciona, no olvides eliminar todos los procesos.   corriendo en la sesión de pantalla perdida.

quack quixote
fuente