Przypadkowo stworzyłem ponad 1000 ekranów. Jak zabić ich wszystkich za pomocą jednego polecenia? (Lub kilka)
screen -ls | grep "<name>" | cut -d. -f1 | tr --delete "\t" | xargs kill -9; screen -wipe; screen -ls;
Przypadkowo stworzyłem ponad 1000 ekranów. Jak zabić ich wszystkich za pomocą jednego polecenia? (Lub kilka)
screen -ls | grep "<name>" | cut -d. -f1 | tr --delete "\t" | xargs kill -9; screen -wipe; screen -ls;
Odpowiedzi:
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
Top
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 -ls
wyś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
, $1
odnosi się do pierwszego argumentu wyłapanego przez awk. Na koniec wykonujemy polecenie quit za pomocą screen -X quit
.
screen -ls | grep '(Detached)' | awk '{print $1}' | xargs -I % -t screen -X -S % quit
pracował dla mnie lepiej.
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 \).
screen -m sleep 100000
. Stało się to i nie zauważyłem, dopóki nie utworzyłem już ponad 1000 sesji ekranowych.
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)'
for scr in $(screen -ls | awk '{print $1}'); do screen -S $scr -X kill; done
screen -ls | grep Detached | cut -d. -f1 | awk '{print $1}' | xargs kill