Comment puis-je tuer tous les écrans?


76

J'ai accidentellement créé plus de 1000 écrans. Comment puis-je tous les tuer avec une seule commande? (Ou quelques-uns)


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

Bonne idée @sactiw. Je l'ai modifié pour fonctionner avec mes sessions nommées et ai légèrement modifié les commandes, en nettoyant complètement les sessions au cas où elles seraient «bloquées» comme elles l'étaient pour moi, et en listant à nouveau pour l'utilisateur comme un screen -ls | grep "<name>" | cut -d. -f1 | tr --delete "\t" | xargs kill -9; screen -wipe; screen -ls;
test de cohérence

3
Comment avez-vous créé accidentellement 1000 écrans?
duhaime

Réponses:


95

Vous pouvez utiliser :

pkill screen

Ou

killall screen

Sous OSX, le processus s'appelle SCREEN en majuscules. Alors, utilisez:

pkill SCREEN

Ou

killall SCREEN

2
Il n'est pas recommandé d'utiliser SIGKILL dans ce cas. SIGTERM serait un bien meilleur choix.
Marco

Salut, Rahul Patil. pourquoi l'écran n'est pas répertorié dansTop
user15964

Et si je n'ai pas de permissions? Dois-je entrer et sortir manuellement de tous les écrans individuellement?
hipoglucido

13

Si les écrans sont morts, utilisez:

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

J'ai récemment commencé à me familiariser avec awk. Je l'ai posté depuis que c'est assez facile à comprendre.

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

screen -lsrépertorie tous les écrans actuels. grep 'pattern'filtre toutes les lignes correspondantes. Nous pouvons alors obtenir une poignée pour tous les écrans détachés et avec awk sys {command}nous pouvons copier et coller ensemble une commande et l'exécuter avec sys, $1fait référence au premier argument repris par awk. Enfin, nous exécutons la commande quit avec screen -X quit.


1
screen -ls | grep '(Detached)' | awk '{print $1}' | xargs -I % -t screen -X -S % quit a fonctionné mieux pour moi.
Whereisalext

2

Je suis un peu perplexe sur la façon dont vous avez réussi à créer 1000 "écrans". Voulez-vous dire peut-être 1 000 fenêtres d'écran (1 000 fenêtres de terminaux différentes au sein d'une même session d'écran)?

Si vous vouliez parler de 1000 fenêtres dans une seule session d'écran, une solution plus élégante consisterait à quitter l'écran à l'aide de la commande C-a \(ctrl-a suivi de \).


1
Essayez d’exécuter screen 1000x dans screen. Ce qui se produit? Vous obtenez 1000 fenêtres d'écran. Oui, c'est vrai, l'écran intelligemment et heureusement ne génère pas 1000 sessions d'écran. Donc, si l'OP avait déjà démarré l'écran, il serait beaucoup plus facile de démarrer accidentellement 1000 fenêtres d'écran que de démarrer 1000 sessions d'écran.
Railgun2

Étrange, mais le commentaire auquel je répondais semble avoir disparu. Quoi qu'il en soit, je laisse le commentaire ci-dessus rester pour le compte rendu.
Railgun2

1
En fait, c'est assez simple. Il suffit de faire une boucle infinie (par accident) et de mettre quelque chose comme ça là-dedans screen -m sleep 100000. Ceci est arrivé et je ne l'ai pas remarqué avant que cela ait déjà créé plus de 1000 sessions d'écran.
BrainStone

0

La commande suivante mettra fin à tous les écrans inactifs:

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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.