matar una sesión de pantalla

66

Estoy tratando de matar una sesión de pantalla. Noté muchas otras preguntas relacionadas, pero ninguna de esas respuestas me funciona. Estoy tratando de matar la siguiente sesión:

screen -ls
There is a screen on:
    23520.pts-6.porkypig    (09/30/2013 02:49:47 PM)    (Detached)
1 Socket in /var/run/screen/S-root.

screen -r 23520.pts-6.porkypig

Ahora estoy en la sesión. De acuerdo con la documentación:

http://www.gnu.org/software/screen/manual/screen.html#Quit

Se supone que debo presionar "control a" y luego "control \". Hago eso y no pasa nada.

Otra solución dice presionar Ctrl+ ay escribir: salir. Sin embargo, nuevamente no hace nada. De hecho, presionando control+ a, absolutamente nada sucede después, excepto un mensaje "No hay otra ventana"

JohnMerlino
fuente
1
en la pantalla v4.x, para matar todas las sesiones,ps aux | grep "SCREEN" | awk '{print $2}' | xargs kill
Fredrick Gauss
2
Para el registro, puede simplemente hacer screen -r porkypigo screen -r 23520, en lugar de tener que incluir la cadena completa. Se supone que los nombres de pantalla hacen las cosas más fáciles, no más complicadas.
Mikkel

Respuestas:

73

primero debe volver a adjuntar a la sesión de pantalla
screen -r 23520como lo ha hecho. Luego presiona ctrl+ ay luego una mayúscula Ky presiona ycuando te pregunte si realmente quieres matar la sesión

Jacob Minshall
fuente
2
Esto funciona si hay un problema con un proceso que se ejecuta dentro de la pantalla, pero no si hay un problema con la pantalla misma. Ese es el caso el 99% del tiempo, y tiene el beneficio adicional de afectar solo una ventana dentro de la pantalla en lugar de terminar todas las ventanas.
Mikkel
1
Es matar una ventana, no una sesión
Eric Wang
57

Puede salir de esa pantalla sin adjuntarla. Primero, encuentre su sesión:

$ screen -ls

y luego dejarlo:

$ screen -XS [session # you want to quit] quit

(-X = Ejecutar comando, -S PID de sesión para ejecutar)

[ACTUALIZAR]

Ejemplo:

screen -XS 20411 quit
shgnInc
fuente
1
Esto fue bastante simple. Puede simplificarlo aún más combinando -X -S con -XS
AJ.
2
Debería dar crédito a la respuesta innaM si la copia
Martin Thoma
8

Esto matará a todas las pantallas separadas:

screen -ls | grep separado | corte -d. -f1 | awk '{print $ 1}' | xargs kill

Esto matará todas las pantallas, adjuntas o separadas

screen -ls | grep pts | corte -d. -f1 | awk '{print $ 1}' | xargs kill
usuario324207
fuente
7

Entonces, con todas esas sugerencias oficiales, busquemos algo más fácil, igual de efectivo y más sencillo.

pkill screen

¿Quién quiere entrar en una pantalla desconocida e innecesaria solo para presionar un par de comandos que la mayoría apenas recuerda? Esto evita entrar en absoluto y lo mata de inmediato.

Además, si tiene más de uno, esto los llevará a todos de una sola vez.

Brian Thomas
fuente
1
Tenga en cuenta que esto eliminará todas las pantallas en ejecución, que pueden o no ser lo que desea.
Mikkel
No es una buena elección. Lo he estado haciendo por algún tiempo. A veces causa malos comportamientos (por ejemplo, cerrar sesión de su cuenta de usuario de inmediato). Además, como mencionó @Mikkel, podría cerrar todas las pantallas, lo que no sería lo que desea. A veces necesita seguir ejecutando algunas (por ejemplo, algunas se ejecutan por sistema) y detener otras pantallas.
MAChitgarha
2

Encontré este problema al actualizar la pantalla. El screencomando se bloqueará cuando intente volver a conectar la sesión, independientemente de cuántos -Do -Ragregue al comando. Sin embargo, screen -lsproporciona convenientemente el pid de la sesión, permitiéndole intervenir usando lo siguiente:

10:42 user ~ $ screen -ls
There is a screen on:
        5730.my_screen     (Detached)
1 Socket in /tmp/screens/S-user.

10:42 user ~ $ sudo kill 5730

10:43 user ~ $ screen -ls
No Sockets found in /tmp/screens/S-user.

(Esto es similar a la respuesta de Brian Thomas, pero la suya matará todas las sesiones de pantalla en ejecución, lo que puede no ser lo que desea si tiene varias pantallas abiertas pero solo una mal comportamiento).

Mikkel
fuente
Después de 6 horas rompiendo mi cabeza por Internet ... la suya fue la única respuesta que funcionó. ¡Gracias amigo!
kRazzy R
1

Como tú, quería matar mi sesión de pantalla y encontré que la documentación no era útil. Convencido de que debe haber un atajo de teclado, descubrí que
ctrl + aluego \
funciona

Luego recibo el mensaje: "Realmente salga y mate todas sus ventanas [y \ n]"

No estoy seguro de por qué la documentación dice ctrl + aentonces ctrl + \. Eso no hace nada por mí.

lizp
fuente
1

Puede encontrar la identificación del proceso de la pantalla de ejecución adjunta. Lo encontré igual que el ID de sesión que puede obtener por comando:
screen -ls
y puede usar el siguiente comando para matar ese proceso:
kill [sessionId]o
sudo kill [sessionId]
puede matar la pantalla incluso si está conectada en alguna otra ventana de terminal.

Siddhant
fuente
0

Presione ctrl + d para cerrar la ventana de la pantalla. Repita esto hasta que mate todas las ventanas de la pantalla. Una vez que se haya agotado, la pantalla de todas las ventanas matará la sesión y finalizará. La solución más corta si no tiene muchas ventanas

Dilushan
fuente