¿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)

BrainStone
fuente
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
Rahul Patil
fuente
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
Adam_G
fuente
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 
Don Wei
fuente
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.

Eliassen
fuente
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 \).

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