Як вбити всі екрани?


74

Я випадково створив понад 1000 екранів. Як я вбиваю їх усіх за допомогою однієї команди? (Або кілька)


3
запустити ->screen -ls | grep Detached | cut -d. -f1 | awk '{print $1}' | xargs kill
sactiw

Гарна ідея @sactiw. Я змінив його, щоб він працював із названими сесіями, і трохи змінив команди на перевагу, повністю screen -ls | grep "<name>" | cut -d. -f1 | tr --delete "\t" | xargs kill -9; screen -wipe; screen -ls;
очистивши

3
Як ви випадково створили 1000 екранів?
duhaime

Відповіді:


94

Ви можете використовувати:

pkill screen

Або

killall screen

У OSX процес називається ЕКРАН у всіх кришках. Отже, використовуйте:

pkill SCREEN

Або

killall SCREEN

2
У цьому випадку використовувати SIGKILL не рекомендується. SIGTERM був би набагато кращим вибором.
Марко

Привіт, Рахуль Патіл. чому екран не вказаний уTop
user15964

Що робити, якщо у мене немає дозволів? Чи потрібно вручну заходити та виходити з усіх екранів окремо?
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

Нещодавно почав знайомитися з awk, я зібрав це, і це послужило своєму призначенню. Я розмістив його, оскільки його досить легко зрозуміти.

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

Де screen -lsперераховані всі поточні екрани. grep 'pattern'фільтрує всі відповідні рядки. Потім ми можемо отримати ручку для всіх відокремлених екранів, і awk sys {command}ми можемо скопіювати і вставити команду разом і виконати її sys, $1стосується першого аргументу, зібраного awk. Нарешті ми виконуємо команду quit за допомогою screen -X quit.


1
screen -ls | grep '(Detached)' | awk '{print $1}' | xargs -I % -t screen -X -S % quit краще працював для мене.
whereisalext

2

Я трохи спантеличений тим, як вам вдалося створити 1000 «екранів». Ви мали на увазі 1000 вікон екрана (1000 різних вікон терміналів протягом одного сеансу екрану)?

Якщо ви мали на увазі 1000 вікон протягом сеансу на одному екрані, то більш елегантним рішенням було б вийти з екрана за допомогою команди C-a \(ctrl-a, за якою \).


1
Спробуйте виконати екран 1000x у межах екрана. Що сталося? Ви отримуєте 1000 вікон екрану. Так, так, екран інтелектуально і милосердно не породжує 1000 сеансів екрану. Отже, якщо ОП вже запущена на екрані, випадково запустити 1000 вікон на екрані було б набагато простіше, ніж розпочати 1000 екранні сеанси.
Railgun2

Дивно, але коментар, на який я відповідав, схоже, зник. У будь-якому випадку я дозволяю, щоб вищезазначений коментар стояв для запису.
Railgun2

1
Ну це насправді досить просто. Просто зробіть нескінченну петлю (випадково) і покладіть туди щось подібне screen -m sleep 100000. Це сталося, і я не помітив, поки він вже створив понад 1000 екранізацій.
BrainStone

0

Наступна команда припинить усі неактивні екрани:

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.