J'ai accidentellement créé plus de 1000 écrans. Comment puis-je tous les tuer avec une seule commande? (Ou quelques-uns)
screen -ls | grep "<name>" | cut -d. -f1 | tr --delete "\t" | xargs kill -9; screen -wipe; screen -ls;
J'ai accidentellement créé plus de 1000 écrans. Comment puis-je tous les tuer avec une seule commande? (Ou quelques-uns)
screen -ls | grep "<name>" | cut -d. -f1 | tr --delete "\t" | xargs kill -9; screen -wipe; screen -ls;
Réponses:
Vous pouvez utiliser :
pkill screen
Ou
killall screen
Sous OSX, le processus s'appelle SCREEN en majuscules. Alors, utilisez:
pkill SCREEN
Ou
killall SCREEN
Top
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}'
Où screen -ls
ré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
, $1
fait référence au premier argument repris par awk. Enfin, nous exécutons la commande quit avec screen -X quit
.
screen -ls | grep '(Detached)' | awk '{print $1}' | xargs -I % -t screen -X -S % quit
a fonctionné mieux pour moi.
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 \).
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.
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)'
for scr in $(screen -ls | awk '{print $1}'); do screen -S $scr -X kill; done
screen -ls | grep Detached | cut -d. -f1 | awk '{print $1}' | xargs kill