Wie kann ich alle Bildschirme abbrechen?

75

Ich habe versehentlich über 1000 Bildschirme erstellt. Wie kann ich sie alle mit einem Befehl töten? (Oder ein paar)

BrainStone
quelle
3
run ->screen -ls | grep Detached | cut -d. -f1 | awk '{print $1}' | xargs kill
sactiw
Gute Idee @sactiw. Ich habe es so geändert, dass es mit meinen benannten Sessions funktioniert, und die Befehle ein wenig nach screen -ls | grep "<name>" | cut -d. -f1 | tr --delete "\t" | xargs kill -9; screen -wipe; screen -ls;
Belieben angepasst
3
Wie haben Sie aus Versehen 1000 Bildschirme erstellt?
Duhaime

Antworten:

95

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
Rahul Patil
quelle
2
In diesem Fall wird die Verwendung von SIGKILL nicht empfohlen. SIGTERM wäre eine viel bessere Wahl.
Marco
Hallo Rahul Patil. Warum Bildschirm ist nicht in aufgeführtTop
user15964
Was ist, wenn ich keine Berechtigungen habe? Muss ich alle Bildschirme einzeln manuell aufrufen und schließen?
Hipoglucido
13

Wenn die Bildschirme tot sind, verwenden Sie:

screen -wipe
Adam_G
quelle
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
quelle
5

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 -lslistet 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, $1verweist auf das erste von awk aufgegriffene Argument. Zuletzt führen wir den Befehl quit mit aus screen -X quit.

Eliassen
quelle
1
screen -ls | grep '(Detached)' | awk '{print $1}' | xargs -I % -t screen -X -S % quit funktionierte besser für mich.
whereisalext
2

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 .

Railgun2
quelle
1
Versuchen Sie, Bildschirm 1000x innerhalb des Bildschirms auszuführen. Was geschieht? Sie erhalten 1000 Bildschirmfenster. Ja, das ist richtig, Bildschirm intelligent und gnädig erzeugt nicht 1000 Bildschirmsitzungen. Wenn also das OP bereits Bildschirm gestartet hatte, sollte es weitaus einfacher sein, versehentlich 1000 Bildschirmfenster zu starten, als 1000 Bildschirmsitzungen zu starten.
Railgun2
Merkwürdig, aber der Kommentar, auf den ich geantwortet habe, scheint verschwunden zu sein. Wie auch immer, ich lasse den obigen Kommentar für die Aufzeichnung stehen.
Railgun2
1
Nun, es ist eigentlich ziemlich einfach. Machen Sie einfach eine Endlosschleife (aus Versehen) und fügen Sie so etwas ein screen -m sleep 100000. Dies geschah und ich bemerkte es nicht, bis es bereits über 1000 Bildschirmsitzungen erzeugt hatte.
BrainStone
0

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