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?

Tim
fuente
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

innaM
fuente
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

Melvin Peter
fuente
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
nilloc
fuente
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
Hitman_99
fuente
¿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.

rc2012
fuente
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
29
screen -wipe

Debe limpiar todas las sesiones de pantalla muerta .

Vishv Jeet
fuente
11
¿Qué significa muerto? no ejecuta ningún programa?
Shihao Xu
1
@ShihaoXu Dead significa que la sesión es inalcanzable y está en localhost (la conexión de socket está interrumpida). - ver gnu.org/software/screen/manual/screen.html
iBaff
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.

usuario2115803
fuente
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
21

Para mi un simple

exit

trabajos. Esto es desde dentro de la sesión de pantalla.

Nick Desaulniers
fuente
2
también, ctrl + a:quit
Nick Desaulniers
2
también, ctrl + a, luego K
Nick Desaulniers
O simplemente CTRL + D dentro de una pantalla
Frederik Witte
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

Rose Perrone
fuente
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.
duggi
fuente
¿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.

dat789
fuente