вбити екран (але не на всіх екранах)


19

У мене на сервері Ubuntu працює кілька екранів, які ініціюються як:

screen -dmS screen1 cmd
screen -dmS screen2 cmd
etc...

І мені потрібно вбити один екран, але не всі вони. Яка правильна команда вбити один конкретний екран із його ім'ям? Я читав сторінки чоловіка, але не можу знайти команду, яку шукаю.

Також я хочу записати цю команду в скрипт bash, щоб я не міг просто screen -r screen1натиснути Ctrl+, Xяк зазвичай.


Вибачте, думав, що це стосується Donkey Kong на секунду
Chopper3

Я люблю цю футболку ohgizmo.com/wp-content/uploads/2008/11/…
Chopper3

Це хороший трійник, більшість людей не отримає його ти, якщо тільки вони не бачили "Короля Конга": imdb.com/title/tt0923752
BassKozz

Правильне слово для об’єкта фрази - «тобі».
Призупинено до подальшого повідомлення.

3
Ви сказали тут "дістань це" і "Дякую" нижче. Це має бути "дістати [для] тобі" та "Спасибі [тобі]".
Призупинено до подальшого повідомлення.

Відповіді:


19

На чоловіковій сторінці:

   -X   Send the specified command to a running screen  session.  You  can
        use  the  -d or -r option to tell screen to look only for attached
        or detached screen sessions. Note that this command  doesn't  work
        if the session is password protected.

Ви можете зробити :

        screen -X -S <sessionid> kill

СУЧАСНИЙ !!! Завдяки defraagh, вуса пропустили це у чоловіка.
BassKozz


9

Якщо ви зробите це screen -list, ви помітите, що кожне ім'я екрана починається з числа, яке є PID екрана:

 $ screen -list
There are screens on:
        12281.pts-1.jonah       (12/21/2009 07:53:19 PM)        (Attached)
        10455.pts-1.jonah       (12/19/2009 10:55:25 AM)        (Detached)
2 Sockets in /var/run/screen/S-raphink.

Звідти просто надішліть сигнал KILL до цього конкретного PID:

$ kill 12281

і це вб'є конкретний екран.


це не спрацює, тому що я запускаю його за допомогою скрипту bash, і мені не доведеться витягувати PID з екранного списку, який відповідає правильному екрану ... Відповідь defraagh вище працював як шарм. Дякую тобі.
BassKozz

Добре, добре, що дефраг мав ідеальне рішення для цього.
phaphink

1

Рішення defraagh не працює для мене, проте я можу вбити сеанс на екрані, використовуючи ідею Рафінка:

екран-список отримати ідентифікатор процесу

вбити -9 ПРОЦЕСІД

екран - вікно SESSIONID


1

Якщо у вас є кілька екранів з однаковою назвою, ви можете вбити їх відразу:

screen -ls  | egrep "^\s*[0-9]+.ScreenName" | awk -F "." '{print $1}' | xargs kill
  • Команда screen -lsдрукує екрани з їх номером процесу. Наприклад, 4773.test - це екран з номером процесу 4773 та тестом імені . Вибірка зразка:

    6322.ss      (05/23/2018 10:39:08 AM)        (Detached)
    6305.sc  (05/23/2018 10:38:40 AM)        (Detached)
    6265.ScreenName       (05/23/2018 10:37:59 AM)        (Detached)
    6249.ScreenName  (05/23/2018 10:37:50 AM)        (Detached)
    6236.scc        (05/23/2018 10:37:42 AM)        (Detached)
  • Командні egrepфільтри над зразковим текстом, що надсилаються по трубопроводу | .

  • Команда awk -F "." '{print $1}'витягує перший стовпець кожного рядка. Розділювач між стовпцями визначається як крапка (.) За допомогою опції -F
  • Нарешті команда xargs killзнищить увесь процес, номери якого надсилаються через pipe |. xargsвикористовується, коли ми хочемо виконати команду на кожному з входів.

0

Ви відкриєте нове вікно за допомогою

Ctrl A + C

Ви закриваєте вікно с

Ctrl + D

або команда виходу у вікні


0

Я займався цим таким чином:

process=$(screen -ls | grep screen1)
kill $(echo $process | cut -f1 -d'.')
exit

Пояснення полягає в тому, що ви берете результат screen -lsі знаходите конкретний екран, який вас цікавить, використовуючи grep, а потім присвоюєте цю рядок змінній process.

Оскільки вихідний результат screen -lsзавжди є PID, а за ним - період, ви можете використовувати cut, щоб позбутися періоду та всього після нього. у наведеному вище прикладі ми поміщаємо це в дужки і подаємо його команді kill, хоча ви можете це робити лінійно, що може включати запис у тимчасовий файл та зчитування з нього.

Вам потрібно переконатися, що ваше ім'я екрана є унікальним, і що grep ВІДПОВІДЬ повертає ім'я екрана, який ви хочете вбити.

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