Ich habe versehentlich über 1000 Bildschirme erstellt. Wie kann ich sie alle mit einem Befehl töten? (Oder ein paar)
screen -ls | grep "<name>" | cut -d. -f1 | tr --delete "\t" | xargs kill -9; screen -wipe; screen -ls;
Ich habe versehentlich über 1000 Bildschirme erstellt. Wie kann ich sie alle mit einem Befehl töten? (Oder ein paar)
screen -ls | grep "<name>" | cut -d. -f1 | tr --delete "\t" | xargs kill -9; screen -wipe; screen -ls;
Antworten:
Sie können verwenden:
pkill screen
Oder
killall screen
In OSX heißt der Prozess in Großbuchstaben SCREEN. Also benutze:
pkill SCREEN
Oder
killall SCREEN
Top
Ich habe kürzlich begonnen, mich mit awk vertraut zu machen. Ich habe dies zusammengestellt und es hat seinen Zweck erfüllt. Ich habe es gepostet, da es ziemlich einfach zu verstehen ist.
screen -ls | grep '(Detached)' | awk 'sys {screen -S $1 -X quit}'
Wo screen -ls
listet alle aktuellen Bildschirme auf.
grep 'pattern'
filtert alle übereinstimmenden Zeilen heraus. Wir können dann ein Handle für alle getrennten Bildschirme bekommen und mit dem awk sys {command}
wir einen Befehl kopieren und zusammenfügen und ausführen können sys
, $1
verweist auf das erste von awk aufgegriffene Argument. Zuletzt führen wir den Befehl quit mit aus screen -X quit
.
screen -ls | grep '(Detached)' | awk '{print $1}' | xargs -I % -t screen -X -S % quit
funktionierte besser für mich.
Ich bin ein bisschen verwirrt darüber, wie Sie es geschafft haben, 1000 "Bildschirme" zu erstellen. Meinten Sie vielleicht 1000 Bildschirmfenster (1000 verschiedene Terminalfenster innerhalb einer Bildschirmsitzung)?
Wenn Sie 1000 Fenster in einer einzelnen Bildschirmsitzung meinten, wäre es eine elegantere Lösung, den Bildschirm mit dem Befehl C-a \
(Strg-A, gefolgt von \) zu beenden .
screen -m sleep 100000
. Dies geschah und ich bemerkte es nicht, bis es bereits über 1000 Bildschirmsitzungen erzeugt hatte.
Der folgende Befehl beendet alle inaktiven Bildschirme:
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