Matar sesión de pantalla separada [cerrado]


864

Aprendí de algún lado que una pantalla separada puede ser asesinada por

screen -X -S [session # you want to kill] kill

de donde se puede obtener [sesión # que quieres matar]

screen -ls

Pero esto no funciona. ¿Nada malo? ¿Cuál es la forma correcta?


25
"algún lugar" no siempre es una buena fuente de información. Prueba con "pantalla de hombre".
innaM

27
El comando correcto esscreen -S sessionname -p 0 -X quit
jimmetry

killall - # pantalla [# = número de pantallas que desea eliminar]
CArnold

Simplemente uso exit
TPArrow

CTRL + D cuando está en la pantalla es el comando más fácil.
Don King

Respuestas:


1267

"kill" solo matará una ventana de pantalla. Para "matar" la sesión completa, use quit.

Ejemplo

$ screen -X -S [session # you want to kill] quit

Para sesiones muertas use: $ screen -wipe


112
escriba 'exit' (sin las comillas) en ubuntu: P
mzalazar el

16
exitfunciona pero debe escribirse en cada pantalla que se abrió. quitni siquiera funciona
kapad

44
@kapad en realidad deja de funcionar si lo escribe en línea -X -S pid / sockname quit
Eduard

20
en OSX entrar screen -X quiten ningún termina terminales todas las sesiones activas
Michel

55
Ctrl + D también funciona
Yi Xin

499

Puede matar una sesión separada que no responde dentro de la sesión de pantalla haciendo lo siguiente.

  1. Escriba screen -listpara identificar la sesión de pantalla separada.

    ~ $ screen -list  
        Hay pantallas en:  
             20751.Melvin_Peter_V42 (Independiente)  
    

    Nota: 20751.Melvin_Peter_V42es su id de sesión.

  2. Adjuntarse a la sesión de pantalla separada

    pantalla -r 20751.Melvin_Peter_V42
  3. Una vez conectado a la sesión, presione Ctrl+ y Aluego escriba:quit


20
puedes usar la pantalla -r 20751 sin el nombre completo
Gal Bracha

53
o: Ctrl + a, k
laffuste

@laffuste 's comentario trabajó para mí, pero quity :quitconducen a command not founden mi servidor Linux remoto (tal vez las diferencias entre las versiones del sistema operativo o de la pantalla son los culpables)
Hack-R

una vez conectado a la pantalla, exittambién funciona
PankajKabra

145

Lista de pantallas:

screen -list

Salida:

There is a screen on:
23536.pts-0.wdzee       (10/04/2012 08:40:45 AM)        (Detached)
1 Socket in /var/run/screen/S-root.

Kill screen session:

screen -S 23536 -X quit

1
'screen -ls' también funciona. ;)
Atul Vaibhav

113

Es más fácil matar una sesión, cuando se le da un nombre significativo:

//Creation:
screen -S some_name proc
// Kill detached session
screen -S some_name -X quit

¿Por qué screen -Sy no screen -r?
43 Tesseracts

1
Esta respuesta usa el nombre de la sesión, que es mucho más conveniente que buscar la ID. ¡Gracias!
Paul Kenjora

43

Simplemente puede ir al lugar donde se aloja la sesión de pantalla y ejecutar:

 screen -ls

lo que resulta en

 There is a screen on:
         26727.pts-0.devxxx      (Attached)
 1 Socket in /tmp/uscreens/S-xxx. <------ this is where the session is.

Y solo quítalo:

  1. cd / tmp / uscreens / S-xxx
  2. ls
  3. 26727.pts-0.devxxx
  4. rm 26727.pts-0.devxxx
  5. ls

El uscreensdirectorio ya no tendrá el 26727.pts-0.devxxxarchivo. Ahora para asegurarse de escribir esto:

screen -ls

y deberías obtener:

No se encontraron sockets en / tmp / uscreens / S-xxx.


44
Esta es la única solución que funcionará si la pantalla está "atascada", es decir. no muerto, pero no se puede unir a él.
redreinard

Esto me ayudó cuando la pantalla estaba completamente bloqueada, pero también necesitaba encontrar y eliminar el proceso real. ps aux | grep screenEncontré el pid y emití un killpara eliminarlo. Dependiendo de lo que haya ejecutado en su pantalla, también puede tener archivos temporales y bloqueos para limpiar.
Lomky


23

agregue esto a su ~/.bashrc:

alias cleanscreen="screen -ls | tail -n +2 | head -n -2 | awk '{print $1}'| xargs -I{} screen -S {} -X quit"

Luego, use cleanscreenpara limpiar todas las sesiones de pantalla.


11
Una simple frase:screen -ls | grep Detached | cut -d. -f1 | awk '{print $1}' | xargs kill
Ariel

3
Trabajó un regalo, pero tuve que modificarlo un poco para que funcione en OSX: screen -ls | tail +2 | head -2 | awk '{print $1}'| xargs -I{} screen -S {} -X quit
Jonathan

Ligera mejora: -screen -ls | grep adjunto | corte -d. -f1 | awk '{print $ 1}' | xargs -I {} pantalla -d {}
Abhay Yadav


16

Para eliminar todas las sesiones de pantalla separadas, incluya esta función en su archivo.

killd () {
for session in $(screen -ls | grep -o '[0-9]\{5\}')
do
screen -S "${session}" -X quit;
done
}

para ejecutarlo, llame killd


55
A veces no son 5 dígitos, así que uso: killd () {para la sesión en $ (screen -ls | grep -o '[0-9] \ +') do screen -S "$ {session}" -X salir; hecho}
Kostyantyn

7
== ISSUE THIS COMMAND
[xxx@devxxx ~]$ screen -ls


== SCREEN RESPONDS
There are screens on:
        23487.pts-0.devxxx      (Detached)
        26727.pts-0.devxxx      (Attached)
2 Sockets in /tmp/uscreens/S-xxx.


== NOW KILL THE ONE YOU DONT WANT
[xxx@devxxx ~]$ screen -X -S 23487.pts-0.devxxx kill


== WANT PROOF?
[xxx@devxxx ~]$ screen -ls
There is a screen on:
        26727.pts-0.devxxx      (Attached)
1 Socket in /tmp/uscreens/S-xxx.

¿No sería eso simplemente eliminar el zócalo, no matar el proceso detrás de él?
Martin C.

¿Es este método arriesgado desde el punto de vista de la creación de procesos zombies?
Fedir RYKHTIK

5

Alternativamente, mientras está en su sesión de pantalla, todo lo que tiene que hacer es escribir exit

Esto matará la sesión de shell iniciada por la pantalla, que efectivamente termina la sesión de pantalla en la que se encuentra.

No es necesario molestarse con la identificación de sesión de pantalla, etc.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.