У меня есть несколько экранов, запущенных на сервере Ubuntu, которые запускаются как:
screen -dmS screen1 cmd
screen -dmS screen2 cmd
etc...
И мне нужно убить один экран, но не все из них. Какова правильная команда, чтобы убить один конкретный экран с его именем? Я прочитал справочные страницы, но не могу найти нужную команду.
Также я хочу написать эту команду в сценарии bash, поэтому я не могу просто screen -r screen1
нажать Ctrl+, Xкак обычно.
bash
gnu-screen
kill
BassKozz
источник
источник
Ответы:
Со страницы руководства:
Ты можешь сделать :
источник
Если вы сделаете a
screen -list
, вы заметите, что каждое имя экрана начинается с цифры, которая является PID экрана:Оттуда просто отправьте сигнал KILL на этот конкретный PID:
и это убьет конкретный экран.
источник
Решение defraagh не работает для меня, однако я могу убить сеанс экрана, используя идею Raphink:
Экран-список получить идентификатор процесса
убить -9 ПРОЦЕССИД
экран - протрите SESSIONID
источник
Если у вас есть несколько экранов с одинаковым именем, вы можете убить их сразу:
Команда
screen -ls
печатает экраны с их номером процесса. Например, 4773.test - это экран с номером процесса 4773 и именем теста . Образец вывода:egrep
Фильтры команд над примером текста, отправляемого по конвейерной линии | ,awk -F "." '{print $1}'
извлекает первый столбец каждой строки. Разделитель между столбцами определяется как точка (.) С помощью опции -Fxargs kill
уничтожит все процессы, номера которых отправлены через канал |.xargs
используется, когда мы хотим выполнить команду на каждом из входов.источник
Вы открываете новое окно с
Вы закрываете окно с
или выйти из команды в окне
источник
Я имел дело с этим следующим образом:
Объяснение состоит в том, что вы берете выходные данные
screen -ls
и находите конкретный интересующий вас экран, используя grep, а затем присваиваете эту строку переменнойprocess
.Поскольку выводом
screen -ls
всегда является PID, за которым следует точка, вы можете использовать команду cut, чтобы избавиться от точки и всего после нее. в приведенном выше примере мы помещаем это в круглые скобки и передаем его команде kill, хотя вы можете сделать это линейно, что может включать запись во временный файл и чтение из него.Вы должны убедиться, что ваше экранное имя уникально и что grep возвращает ТОЛЬКО имя экрана, который вы хотите убить.
источник