Tengo un programa corriendo bajo la pantalla. De hecho, cuando me desconecto de la sesión y compruebo netstat, puedo ver que el programa todavía se está ejecutando (que es lo que quiero):
udp 0 0 127.0.0.1:1720 0.0.0.0:* 3759/ruby
Ahora quiero volver a adjuntar a la sesión que ejecuta ese proceso. Así que inicio una nueva terminal y escribo screen -r
$ screen -r
There are several suitable screens on:
5169.pts-2.teamviggy (05/31/2013 09:30:28 PM) (Detached)
4872.pts-2.teamviggy (05/31/2013 09:25:30 PM) (Detached)
4572.pts-2.teamviggy (05/31/2013 09:07:17 PM) (Detached)
4073.pts-2.teamviggy (05/31/2013 08:50:54 PM) (Detached)
3600.pts-2.teamviggy (05/31/2013 08:40:14 PM) (Detached)
Type "screen [-d] -r [pid.]tty.host" to resume one of them.
Pero, ¿cómo sé cuál es la sesión que ejecuta el proceso que creé?
Ahora uno de los documentos que encontré decía:
"Cuando use una ventana, escriba Ca A para asignarle un nombre. Este nombre se usará en la lista de ventanas y le ayudará a recordar lo que está haciendo en cada ventana cuando comience a usar muchas ventanas". "
El problema es que cuando estoy en una nueva sesión de pantalla, trato de presionar control + a A y no pasa nada.
command-line
gnu-screen
JohnMerlino
fuente
fuente
screen -r
seguido por un número 1, 2, 3 ... en esa lista de pantallas.Respuestas:
Hay dos niveles de "listados" involucrados aquí. Primero, tiene el "listado de ventana" dentro de una sesión individual, que es para lo que sirve ctrl-A A, y segundo hay un "listado de sesión" que es lo que ha pegado en su pregunta y con lo que también se puede ver
screen -ls
.Puede personalizar los nombres de sesión con el
-S
parámetro; de lo contrario, utiliza su nombre de host (teamviggy), por ejemplo:(Ctrl-A d para separar)
(Ctrl-A d para separar)
Como beneficio adicional, puede usar una abreviatura inequívoca del nombre que le pasa
-S
más tarde para volver a conectar:(Estoy reconectado a la
myprogramrunningunderscreen
sesión)fuente
ctrl-A a
yctrl-A shift-A
. Este último me incitóSet window's title to:
. Asegúrese de presionar shift para la segunda A.-S
, debe usar al menos una abreviatura inequívoca del nombre después del número de identificación y el punto en el nombre completo de la sesión de pantalla al reanudar, a diferencia de nombres de sesión generados, donde puede incluir la ID y el punto.Tuve un caso donde
screen -r
no se pudo volver a conectar. Agregar la-d
bandera para que se vea asítrabajó para mi. Separó la pantalla anterior y me permitió volver a conectar. Vea la página del manual para más información.
fuente
Una manera fácil es simplemente reconectarse a una pantalla arbitraria con
Luego, una vez que esté ejecutando la pantalla, puede obtener una lista de todas las pantallas activas presionando
Ctrl-A "
(es decir, control-A seguido de una comilla doble). Luego, puede seleccionar las pantallas activas de una en una y ver qué se están ejecutando. Nombrar las pantallas, por supuesto, facilitará la identificación de la correcta.Solo mis dos centavos
fuente
Tiendo a usar el siguiente combo donde necesito trabajar en varias máquinas en varios grupos:
Esto crea la nueva sesión de pantalla donde puedo construir el entorno.
Esto es lo que uso posteriormente para volver a conectar a esa sesión de pantalla. Los bits ingeniosos son que si la sesión se adjunta en otro lugar, separa esa otra pantalla. Además, si no hay sesión por alguna razón peculiar, como si alguien reiniciara mi servidor sin que yo lo supiera, se crea una. Finalmente. si existen varias sesiones, usa la primera.
Muchas felicitaciones a https://support.dvsus.com/hc/en-us/articles/212925186-Linux-GNU-Screen-instructions por este consejo hace un tiempo.
EDITAR:
También aquí hay algunas explicaciones útiles de los
man screen
parámetros crípticos.hay más,
-D
así que asegúrese de verificarman screen
fuente
La salida de
screen -list
está formateada comopid.tty.host
. Los pids se pueden usar para obtener el primer proceso secundario conpstree
:Obtendrás una lista como esta
fuente
o
fuente