J'ai accidentellement créé plus de 1000 écrans. Comment puis-je tous les tuer avec une seule commande? (Ou quelques-uns)
Vous pouvez utiliser :
pkill screen
Ou
killall screen
Dans OSX, le processus est appelé SCREEN dans toutes les majuscules. Alors, utilisez:
pkill SCREEN
Ou
killall SCREEN
Si les écrans sont morts, utilisez:
screen -wipe
A récemment commencé à me familiariser avec awk j'ai mis cela en place et il a rempli son rôle. Je l'ai posté car il 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
.
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
Je suis un peu perplexe sur la façon dont vous avez réussi à créer 1000 "écrans". Pensiez-vous peut-être à 1000 fenêtres d'écran (1000 fenêtres de terminal différentes au cours d'une même session d'écran)?
Si vous vouliez dire 1000 fenêtres au cours d'une même session d'écran, alors une solution plus élégante serait de quitter l'écran en utilisant la commande C-a \
(ctrl-a suivi de \).
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