Come uccido tutte le schermate?


76

Ho creato accidentalmente oltre 1000 schermi. Come posso ucciderli tutti con un comando? (O pochi)


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

Buona idea @sactiw. L'ho modificato per funzionare con le mie sessioni nominate e ho modificato i comandi un po 'per preferenza, ripulendo completamente le sessioni nel caso in cui fossero "bloccate" come erano per me e elencandole nuovamente per l'utente come controllo di screen -ls | grep "<name>" | cut -d. -f1 | tr --delete "\t" | xargs kill -9; screen -wipe; screen -ls;
integrità

3
Come hai creato accidentalmente 1000 schermi?
duhaime,

Risposte:


95

Puoi usare :

pkill screen

O

killall screen

In OSX il processo è chiamato SCREEN in maiuscolo. Quindi, utilizzare:

pkill SCREEN

O

killall SCREEN

2
In questo caso non è consigliabile utilizzare SIGKILL. SIGTERM sarebbe una scelta molto migliore.
Marco,

Ciao Rahul Patil. perché la schermata non è elencata inTop
user15964

Cosa succede se non ho i permessi? Devo accedere manualmente e uscire da tutte le schermate singolarmente?
hipoglucido,

13

Se gli schermi sono morti, utilizzare:

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

Recentemente ho iniziato a familiarizzare con Awk, l'ho messo insieme e ha funzionato allo scopo. L'ho pubblicato da quando è abbastanza facile da capire.

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

Dove screen -lselenca tutte le schermate correnti. grep 'pattern'filtra tutte le righe corrispondenti. Possiamo quindi ottenere un handle per tutte le schermate distaccate e con awk sys {command}possiamo copiare e incollare un comando ed eseguirlo con sys, si $1riferisce al primo argomento raccolto da awk. Infine eseguiamo il comando quit con screen -X quit.


1
screen -ls | grep '(Detached)' | awk '{print $1}' | xargs -I % -t screen -X -S % quit ha funzionato meglio per me.
whereisalext

2

Sono un po 'perplesso su come sei riuscito a creare 1000 "schermi". Forse intendevi 1000 finestre di schermo (1000 finestre di terminali differenti in una singola sessione di schermo)?

Se intendevi 1000 finestre in una singola sessione dello schermo, una soluzione più elegante sarebbe quella di uscire dallo schermo usando il comando C-a \(ctrl-a seguito da \).


1
Prova a eseguire lo schermo 1000x all'interno dello schermo. Che succede? Ottieni 1000 finestre sullo schermo. Sì, è vero, lo schermo in modo intelligente e misericordioso non genera 1000 sessioni di schermo. Quindi, se l'OP aveva già avviato lo schermo, dovrebbe essere molto più semplice avviare accidentalmente 1000 finestre dello schermo piuttosto che avviare 1000 sessioni dello schermo.
Railgun2,

Strano ma il commento a cui stavo rispondendo sembra essere scomparso. Ad ogni modo lascio che il commento sopra sia il record.
Railgun2,

1
Beh, in realtà è piuttosto semplice. Basta fare un ciclo infinito (per caso) e mettere qualcosa di simile qui screen -m sleep 100000. Questo è successo e non me ne sono accorto fino a quando non ha già creato oltre 1000 sessioni di schermate.
BrainStone,

0

Il seguente comando terminerà tutte le schermate inattive:

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

0
for scr in $(screen -ls | awk '{print $1}'); do screen -S $scr -X kill; done
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.