Jak zabić wszystkie ekrany?

74

Przypadkowo stworzyłem ponad 1000 ekranów. Jak zabić ich wszystkich za pomocą jednego polecenia? (Lub kilka)

BrainStone
źródło
3
run ->screen -ls | grep Detached | cut -d. -f1 | awk '{print $1}' | xargs kill
sactiw
Dobry pomysł @sactiw. Zmodyfikowałem go, aby działał z moimi nazwanymi sesjami i nieco poprawiłem polecenia, by całkowicie je wyczyścić, na wypadek, gdyby były „zablokowane”, tak jak były dla mnie, i ponownie screen -ls | grep "<name>" | cut -d. -f1 | tr --delete "\t" | xargs kill -9; screen -wipe; screen -ls;
wypisać
3
Jak przypadkowo stworzyłeś 1000 ekranów?
duhaime

Odpowiedzi:

94

Możesz użyć :

pkill screen

Lub

killall screen

W OSX proces nazywa się SCREEN we wszystkich wielkich literach. Więc użyj:

pkill SCREEN

Lub

killall SCREEN
Rahul Patil
źródło
2
W tym przypadku nie zaleca się używania SIGKILL. SIGTERM byłby znacznie lepszym wyborem.
Marco,
Cześć, Rahul Patil. dlaczego screen nie jest wymieniony wTop
user15964 30.04.16
Co jeśli nie mam uprawnień? Czy muszę ręcznie wchodzić i wychodzić osobno ze wszystkich ekranów?
hipoglucido
13

Jeśli ekrany nie działają, użyj:

screen -wipe
Adam_G
źródło
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
źródło
5

Niedawno zacząłem zapoznawać się z awk. Złożyłem to i spełniło swoje zadanie. Opublikowałem go, ponieważ jest dość łatwy do zrozumienia.

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

Gdzie screen -lswyświetla listę wszystkich aktualnych ekranów. grep 'pattern'odfiltrowuje wszystkie pasujące wiersze. Możemy wtedy uzyskać uchwyt dla wszystkich odłączonych ekranów, a następnie awk sys {command}możemy skopiować i wkleić razem polecenie i wykonać je sys, $1odnosi się do pierwszego argumentu wyłapanego przez awk. Na koniec wykonujemy polecenie quit za pomocą screen -X quit.

Eliassen
źródło
1
screen -ls | grep '(Detached)' | awk '{print $1}' | xargs -I % -t screen -X -S % quit pracował dla mnie lepiej.
whereisalext
2

Jestem trochę zdziwiony tym, jak udało ci się stworzyć 1000 „ekranów”. Czy miałeś na myśli 1000 okien ekranowych (1000 różnych okien terminali w ramach jednej sesji ekranowej)?

Jeśli miałeś na myśli 1000 okien w sesji jednego ekranu, bardziej eleganckim rozwiązaniem byłoby zamknięcie ekranu za pomocą polecenia C-a \(ctrl-a, po którym następuje \).

Railgun2
źródło
1
Spróbuj wykonać ekran 1000x na ekranie. Co się dzieje? Dostajesz 1000 okien ekranowych. Tak, zgadza się, ekran inteligentny i na szczęście nie odradza 1000 sesji ekranowych. Więc jeśli PO już uruchomił ekran, powinno być o wiele łatwiej przypadkowo uruchomić 1000 okien ekranowych niż 1000 sesji ekranowych.
Railgun2
Dziwne, ale komentarz, na który odpowiadałem, wydaje się zniknąć. W każdym razie pozwalam powyższemu komentarzowi stać się rekordem.
Railgun2
1
Cóż, to właściwie całkiem proste. Po prostu zrób nieskończoną pętlę (przypadkowo) i umieść tam coś takiego screen -m sleep 100000. Stało się to i nie zauważyłem, dopóki nie utworzyłem już ponad 1000 sesji ekranowych.
BrainStone 11.10.13
0

Następujące polecenie zakończy wszystkie nieaktywne ekrany:

perl -e 'while (map { kill 9, [split /\./]->[0] } grep { /Detached/ } split /\n/, qx{screen -ls}) { sleep 1 } exec qw(screen -wipe)'
Michael Vu
źródło
0
for scr in $(screen -ls | awk '{print $1}'); do screen -S $scr -X kill; done
użytkownik370823
źródło