2

Я работал в разных сеансах экрана в прошлых проектах, поэтому у меня накопилось несколько сеансов экрана. Теперь меня попросили удалить лишние / ненужные сеансы экрана из коробки Unix. Ни одна из них не является мертвой сессией - статус отстранен, а не мертв. ОС - это Солярис.

Один из методов, который мне пришёл в голову, - это удалить папку, в которой хранятся экраны, в папке /tmp/mylogin/screen-r/... , но я не уверен, оставит ли это какие-либо дополнительные процессы или что-то пассивное на сервер.

Как я могу удалить их, не оставляя ничего позади?

Кроме того, занимают ли эти отдельные экраны довольно много ресурсов, достаточно, чтобы предупредить системного администратора? То есть есть ли какие-либо проблемы, возникающие из-за нескольких неиспользуемых / отдельных сеансов экрана?

5 ответов5

2

Как насчет чего-то вроде этого:

screen -ls | awk -F. '$NF~"(Attached)" {print "kill -HUP " $1}' | sh

Оставьте вне | sh если вы хотите увидеть, что он собирается выполнить.

В быстром тесте, который я сделал, все работает нормально.

1

Я знаю его старый вопрос, но вот что я сделал

Named sessions : when i open screen to have meaningful name id for some stuffs im doing related to superuser.com 
# screen -S superuser.com
.. < Ctrl + a + d > ..
# screen -ls
    21668.superuser.com (Detached)  
    21664.otography.com (Detached)
    17386.wimbledon (Detached)
    17200.unsigned.com  (Detached)
    16956.tattooremo    (Detached)
    1082.refinedwater.co.uk (Detached)
    27256.apple.com (Detached)
    21481.careus.co.uk  (Detached)
    326.onlinebuziness.me.uk    (Detached)

# screen -ls | grep "Detached" | awk '{ print $1; }' | cut -d'.' -f2- | xargs -I {} -n 1 screen -S {} -X quit

# screen -ls
    No Sockets found in /var/run/screen/S-root.

Обычные имена сессий: когда я просто набираю "screen", чтобы открыть экранную сессию

 #screen -ls
    There are screens on:
    11580.pts-0.server  (Detached)
    11571.pts-0.server  (Detached)
    2 Sockets in /var/run/screen/S-root.

# screen -ls | grep "Detached" | awk '{ print $1; }' | cut -d'.' -f1 | xargs -I {} -n 1 screen -S {} -X quit

# screen -ls
No Sockets found in /var/run/screen/S-root.
0

Список показывает похожий на вывод ниже

rajshah@rainbow:~$ screen -ls

There are screens on:
        8105.pts-152.rainbow    (Detached)
        5587.work     (Attached)
        20462.rajshah       (Attached) 3 Sockets in /var/run/screen/S-rajshah.

Как сеансы экрана хранятся в /var /run /screen /S- /

Чтобы удалить любой сеанс,

rm -rf /var/run/screen/S-rajshah/8105.pts-152.rainbow

rajshah@rainbow:~$ screen -ls

There are screens on:
        5587.work     (Attached)
        20462.rajshah       (Attached) 3 Sockets in /var/run/screen/S-rajshah.
0

Я думаю, что безопасный способ - сначала убить процесс экрана, а затем запустить команду экрана с добавленной мной опцией.

#ps  -ef|grep screen|grep  -v  grep 

root  8362     1   0 21:20:38 ?           0:00 screen


# screen -ls
There are screens on:
        8363.pts-19.   (Dead ???)
        8262.8  (Attached)
Remove dead screens with 'screen -wipe'.
2 Sockets in /root/.screen.

#kill -9 8262

# screen -wipe
There are screens on:
        8362.pts-19   (Removed)
        8263.8  (Removed)
2 sockets wiped out.
0

У меня была эта проблема с пользователем. Сначала я запустил эту команду, чтобы увидеть, сколько сеансов экрана было открыто этим пользователем:

*# ps aux | grep username > /detached_screens.txt**

(Приведенная выше команда рассмотрит запущенные процессы, а команда grep поможет вам сузить поиск, чтобы показать только процессы, запущенные этим конкретным пользователем. После grep username мне пришлось его записать в файл для справки. Вы не должны использовать эту часть) Я нашел 278 отдельных сеансов экрана, которые никогда не были закрыты с предыдущих месяцев. После определения PID для каждого отдельного экрана я выполнил следующую команду:

*# kill -9 PID PID PID PID PID ...

Это убило все процессы, которые я указал.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .