Mam wiele ekranów uruchomionych na serwerze Ubuntu, które są inicjowane jako:
screen -dmS screen1 cmd
screen -dmS screen2 cmd
etc...
I muszę zabić jeden ekran, ale nie wszystkie. Jakie jest prawidłowe polecenie zabicia pojedynczego ekranu z jego nazwą? Przeczytałem strony podręcznika, ale nie mogę znaleźć polecenia, którego szukam.
Chcę też napisać to polecenie w skrypcie bash, więc nie mogę po prostu screen -r screen1
nacisnąć Ctrl+, Xjak zwykle.
bash
gnu-screen
kill
BassKozz
źródło
źródło
Odpowiedzi:
Ze strony podręcznika:
Możesz to zrobić :
źródło
Jeśli to zrobisz
screen -list
, zauważysz, że każda nazwa ekranowa zaczyna się od cyfry, która jest PID ekranu:Stamtąd po prostu wyślij sygnał KILL do tego konkretnego PID:
i zabije określony ekran.
źródło
rozwiązanie defraagh nie działa dla mnie, jednak mogę zabić sesję ekranową, używając pomysłu Raphinka:
screen -list pobierz identyfikator procesu
zabij -9 PROCESSID
wyczyść ekran SESSIONID
źródło
Jeśli masz kilka ekranów o tej samej nazwie, możesz je zabić jednocześnie:
Polecenie
screen -ls
drukuje ekrany z ich numerem procesu. Na przykład 4773.test to ekran z numerem procesu 4773 i testem nazwy . Przykładowe dane wyjściowe:egrep
Filtry poleceń powyżej przykładowego tekstu wysyłanego za pomocą rurociągu | .awk -F "." '{print $1}'
wypakowuje pierwszą kolumnę każdego wiersza. Separator między kolumnami jest definiowany jako kropka (.) Przez opcję -Fxargs kill
zabije cały proces, którego numery wysłane są przez potok |.xargs
jest używany, gdy chcemy wykonać polecenie na każdym z wejść.źródło
Otworzysz nowe okno za pomocą
Zamykasz okno za pomocą
lub zakończ polecenie w oknie
źródło
Miałem do czynienia z tym w następujący sposób:
Wyjaśnienie jest takie, że bierzesz wynik
screen -ls
i znajdujesz konkretny ekran, który Cię interesuje, używając grep, a następnie przypisujesz ten ciąg do zmiennejprocess
.Ponieważ wyjściem
screen -ls
jest zawsze PID, po którym następuje kropka, możesz następnie użyć cięcia, aby pozbyć się kropki i wszystkiego po niej. w powyższym przykładzie umieszczamy to w nawiasach i podajemy do polecenia kill, chociaż można to zrobić liniowo, co może obejmować zapis do pliku tymczasowego i odczytanie tego.Musisz upewnić się, że twoja nazwa ekranowa jest unikalna, a grep zwraca TYLKO nazwę ekranu, który chcesz zabić.
źródło