Jak zabić wszystkie ekrany?


74

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


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

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


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

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.


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 \).


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)'

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.