Zabij odłączoną sesję ekranu [zamknięte]


864

Nauczyłem się skądś może zabić odłączony ekran

screen -X -S [session # you want to kill] kill

skąd można uzyskać [sesję #, którą chcesz zabić]

screen -ls

Ale to nie działa. Nic złego? Jaka jest właściwa droga?


25
„gdzieś” nie zawsze jest dobrym źródłem informacji. Wypróbuj „ekran człowieka”.
innaM

27
Prawidłowe polecenie toscreen -S sessionname -p 0 -X quit
jimmetry

killall - # screen [# = liczba ekranów, które chcesz zabić]
CAnnold

Po prostu używam wyjścia
TPArrow

CTRL + D, gdy na ekranie jest najłatwiejszym poleceniem.
Don King

Odpowiedzi:


1267

„kill” zabije tylko jedno okno ekranu. Aby „zabić” całą sesję, użyj quit.

Przykład

$ screen -X -S [session # you want to kill] quit

W przypadku martwych sesji użyj: $ screen -wipe


112
wpisz „exit” (bez cudzysłowów) w ubuntu: P
mzalazar

16
exitdziała, ale musi być wpisany na każdym ekranie, który został otwarty. quitnawet nie działa
kapad

4
@kapad faktycznie przestaje działać, jeśli napiszesz je w wierszu -X -S zamknij pid / sockname
Eduard

20
na OSX wejście screen -X quitna dowolnym terminalu kończy wszystkie aktywne sesje
Michel

5
Ctrl + D działa również
Yi Xin

499

Możesz zabić odłączoną sesję, która nie odpowiada w sesji ekranowej, wykonując następujące czynności.

  1. Wpisz, screen -listaby zidentyfikować odłączoną sesję ekranu.

    ~ $ screen -list  
        Są ekrany na:  
             20751. Melvin_Peter_V42 (odłączony)  
    

    Uwaga: 20751.Melvin_Peter_V42to identyfikator sesji.

  2. Dołącz do sesji odłączonego ekranu

    screen -r 20751. Melvin_Peter_V42
  3. Po połączeniu z sesją naciśnij Ctrl+, Aa następnie wpisz:quit


20
możesz po prostu użyć screen -r 20751 bez pełnej nazwy
Gal Bracha,

53
lub: Ctrl + a, k
laffuste

@laffuste „s komentarz pracował dla mnie, ale quiti :quitprowadzić do command not foundmojej zdalnego serwera Linux (prawdopodobnie różnice między wersjami systemu operacyjnego lub ekran są winni)
Hack-R

po podłączeniu do ekranu exitdziała również
PankajKabra

145

Ekrany listy:

screen -list

Wynik:

There is a screen on:
23536.pts-0.wdzee       (10/04/2012 08:40:45 AM)        (Detached)
1 Socket in /var/run/screen/S-root.

Sesja Kill Screen:

screen -S 23536 -X quit

1
Działa również „screen -ls”. ;)
Atul Vaibhav

113

Łatwiej jest zabić sesję, gdy podano jakąś znaczącą nazwę:

//Creation:
screen -S some_name proc
// Kill detached session
screen -S some_name -X quit

Dlaczego screen -Snie screen -r?
43 Teserakty,

1
Ta odpowiedź używa nazwy sesji, co jest o wiele wygodniejsze niż wyszukiwanie identyfikatora. Dziękuję Ci!
Paul Kenjora,

43

Możesz po prostu przejść do miejsca, w którym znajduje się sesja ekranowa i uruchomić:

 screen -ls

Co skutkuje w

 There is a screen on:
         26727.pts-0.devxxx      (Attached)
 1 Socket in /tmp/uscreens/S-xxx. <------ this is where the session is.

I po prostu go usuń:

  1. cd / tmp / uscreens / S-xxx
  2. ls
  3. 26727.pts-0.devxxx
  4. rm 26727.pts-0.devxxx
  5. ls

uscreensKatalog nie będzie miał 26727.pts-0.devxxxplik w nim już. Teraz, aby się upewnić, po prostu wpisz:

screen -ls

i powinieneś otrzymać:

Nie znaleziono gniazd w / tmp / uscreens / S-xxx.


4
Jest to jedyne rozwiązanie, które zadziała, jeśli ekran utknie, tzn. nie martwy, ale nie można go przywiązać.
redreinard

Pomogło mi to, gdy ekran był całkowicie zablokowany, ale musiałem również znaleźć i zabić sam proces. ps aux | grep screenznalazłem pid i wydałem go, killaby go usunąć. W zależności od tego, co masz uruchomione na ekranie, możesz również mieć pliki tymczasowe i blokady do czyszczenia.
Lomky


23

dodaj to do ~/.bashrc:

alias cleanscreen="screen -ls | tail -n +2 | head -n -2 | awk '{print $1}'| xargs -I{} screen -S {} -X quit"

Następnie użyj, cleanscreenaby wyczyścić całą sesję ekranu.


11
Prosty liniowiec:screen -ls | grep Detached | cut -d. -f1 | awk '{print $1}' | xargs kill
Ariel

3
Pracowałem przysmak, ale musiałem go nieco zmodyfikować, aby działał na OSX: screen -ls | tail +2 | head -2 | awk '{print $1}'| xargs -I{} screen -S {} -X quit
Jonathan

Niewielka poprawa: -screen -ls | grep W załączeniu | cut -d. -f1 | awk „{print $ 1}” | xargs -I {} screen -d {}
Abhay Yadav


16

Aby zabić wszystkie odłączone sesje ekranu, włącz tę funkcję w pliku .bash_profile:

killd () {
for session in $(screen -ls | grep -o '[0-9]\{5\}')
do
screen -S "${session}" -X quit;
done
}

aby go uruchomić, zadzwoń killd


5
Czasami nie jest to 5 cyfr, więc używam: killd () {dla sesji w $ (screen -ls | grep -o '[0-9] \ +')) screen -S "$ {session}" -X wyjście; gotowe}
Kostyantyn,

7
== ISSUE THIS COMMAND
[xxx@devxxx ~]$ screen -ls


== SCREEN RESPONDS
There are screens on:
        23487.pts-0.devxxx      (Detached)
        26727.pts-0.devxxx      (Attached)
2 Sockets in /tmp/uscreens/S-xxx.


== NOW KILL THE ONE YOU DONT WANT
[xxx@devxxx ~]$ screen -X -S 23487.pts-0.devxxx kill


== WANT PROOF?
[xxx@devxxx ~]$ screen -ls
There is a screen on:
        26727.pts-0.devxxx      (Attached)
1 Socket in /tmp/uscreens/S-xxx.

Czy to nie po prostu usunie gniazda, a nie zabije całego procesu?
Martin C.

Czy ta metoda jest ryzykowna z punktu widzenia tworzenia procesów zomby?
Fedir RYKHTIK

5

Alternatywnie, podczas sesji ekranowej wszystko, co musisz zrobić, to wpisać polecenie exit

To zabije sesję powłoki zainicjowaną przez ekran, co skutecznie zakończy sesję ekranu, w której się znajdujesz.

Nie musisz przejmować się identyfikatorem sesji ekranu itp.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.