¿Cómo mato todas las pantallas?


76

Accidentalmente creé más de 1000 pantallas. ¿Cómo los mato a todos con un solo comando? (O unos pocos)


3
ejecutar ->screen -ls | grep Detached | cut -d. -f1 | awk '{print $1}' | xargs kill
sactiw

Buena idea @sactiw. Lo modifiqué para que funcione con mis sesiones nombradas, y modifiqué un poco los comandos para preferencia, limpiando las sesiones por completo en caso de que estén 'atascadas' como lo estaban para mí, y enumerando nuevamente para el usuario como un control de cordura:screen -ls | grep "<name>" | cut -d. -f1 | tr --delete "\t" | xargs kill -9; screen -wipe; screen -ls;
Pysis

3
¿Cómo creaste accidentalmente 1000 pantallas?
duhaime

Respuestas:


95

Puedes usar :

pkill screen

O

killall screen

En OSX, el proceso se llama PANTALLA en mayúsculas. Entonces, use:

pkill SCREEN

O

killall SCREEN

2
No se recomienda usar SIGKILL en este caso. SIGTERM sería una opción mucho mejor.
Marco

Hola, Rahul Patil. ¿Por qué la pantalla no aparece enTop
user15964

¿Qué pasa si no tengo permisos? ¿Tengo que entrar y salir manualmente de todas las pantallas individualmente?
hipoglucido

13

Si las pantallas están muertas, use:

screen -wipe

6
str=$(screen -ls)  

array=$(echo $str|tr "." "\n")  

for V in $array  
do  
if [ $V -gt 0  ]  
        then screen -S $V -X quit  
fi  
done 

5

Recientemente comencé a familiarizarme con awk, armé esto y cumplió su propósito. Lo publiqué ya que es bastante fácil de entender.

screen -ls | grep '(Detached)' | awk 'sys {screen -S $1 -X quit}'

Donde screen -lsenumera todas las pantallas actuales. grep 'pattern'filtra todas las filas coincidentes. Entonces podemos obtener un identificador para todas las pantallas separadas y con el awk sys {command}que podemos copiar y pegar un comando y ejecutarlo sys, se $1refiere al primer argumento recogido por awk. Finalmente ejecutamos el comando quit con screen -X quit.


1
screen -ls | grep '(Detached)' | awk '{print $1}' | xargs -I % -t screen -X -S % quit funcionó mejor para mí
whereisalext

2

Estoy un poco perplejo sobre cómo lograste crear 1000 "pantallas". ¿Quizás quiso decir 1000 ventanas de pantalla (1000 ventanas de terminal diferentes dentro de una sola sesión de pantalla)?

Si se refería a 1000 ventanas en una sola sesión de pantalla, una solución más elegante sería salir de la pantalla con el comando C-a \(ctrl-a seguido de \).


1
Intente ejecutar la pantalla 1000x dentro de la pantalla. ¿Lo que pasa? Tienes 1000 ventanas de pantalla. Sí, es cierto, la pantalla de forma inteligente y misericordiosa no genera 1000 sesiones de pantalla. Entonces, si el OP ya había comenzado la pantalla, debería ser mucho más fácil iniciar accidentalmente 1000 ventanas de pantalla que iniciar 1000 sesiones de pantalla.
Railgun2

Es extraño, pero el comentario al que respondía parece haber desaparecido. De todos modos, estoy dejando que el comentario anterior represente el récord.
Railgun2

1
Bueno, en realidad es bastante simple. Simplemente haga un bucle infinito (por accidente) y coloque algo como esto allí screen -m sleep 100000. Esto sucedió y no me di cuenta hasta que ya había creado más de 1000 sesiones de pantalla.
BrainStone

0

El siguiente comando terminará todas las pantallas inactivas:

perl -e 'while (map { kill 9, [split /\./]->[0] } grep { /Detached/ } split /\n/, qx{screen -ls}) { sleep 1 } exec qw(screen -wipe)'

0
for scr in $(screen -ls | awk '{print $1}'); do screen -S $scr -X kill; done
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.