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.