zabić sesję ekranową

65

Próbuję zabić sesję ekranową. Zauważyłem wiele innych powiązanych pytań, ale żadna z tych odpowiedzi nie działa dla mnie. Próbuję zabić następującą sesję:

screen -ls
There is a screen on:
    23520.pts-6.porkypig    (09/30/2013 02:49:47 PM)    (Detached)
1 Socket in /var/run/screen/S-root.

screen -r 23520.pts-6.porkypig

Teraz jestem w sesji. Zgodnie z dokumentacją:

http://www.gnu.org/software/screen/manual/screen.html#Quit

Powinienem nacisnąć „control a”, a następnie „control \”. Robię to i nic się nie dzieje.

Innym rozwiązaniem jest naciśnięcie Ctrl+ ai wpisz: quit. Jednak znowu nic nie robi. W rzeczywistości, naciskając control+ a, absolutnie nic się nie dzieje poza komunikatem „Brak innych okien”

JohnMerlino
źródło
1
na ekranie w wersji 4.x, aby zabić wszystkie sesje,ps aux | grep "SCREEN" | awk '{print $2}' | xargs kill
Fredrick Gauss
2
Dla przypomnienia możesz po prostu zrobić screen -r porkypiglub screen -r 23520zamiast zawierać pełny ciąg. Nazwy ekranów mają ułatwiać, a nie komplikować.
Mikkel

Odpowiedzi:

73

najpierw musisz ponownie dołączyć do sesji ekranowej,
screen -r 23520tak jak to zrobiłeś. Następnie naciśnij ctrl+, aa następnie kapitał Ki naciśnij, ygdy pojawi się pytanie, czy naprawdę chcesz zabić sesję

Jacob Minshall
źródło
2
Działa to, jeśli występuje problem z procesem uruchomionym na ekranie, ale nie, jeśli występuje problem z samym ekranem. Tak jest w 99% przypadków i ma tę dodatkową zaletę, że wpływa tylko na jedno okno na ekranie, a nie na zamykanie wszystkich okien.
Mikkel
1
To zabić okno, a nie sesję
Eric Wang
53

Możesz wyjść z tego ekranu bez dołączania się do niego. Najpierw znajdź jego sesję:

$ screen -ls

a następnie wyjdź z niego:

$ screen -XS [session # you want to quit] quit

(-X = Wykonaj polecenie, -S PID sesji, aby wykonać)

[AKTUALIZACJA]

Przykład:

screen -XS 20411 quit
shgnInc
źródło
1
To było całkiem proste. Możesz to jeszcze bardziej uprościć, łącząc -X -S z -XS
AJ.
2
Powinieneś podziękować odpowiedzi innejM, jeśli ją skopiujesz
Martin Thoma
8

Spowoduje to zabicie wszystkich odłączonych ekranów:

screen -ls | grep odłączony | cut -d. -f1 | awk „{print $ 1}” | xargs zabija

Spowoduje to zabicie wszystkich ekranów, dołączonych lub odłączonych

screen -ls | grep pts | cut -d. -f1 | awk „{print $ 1}” | xargs zabija
użytkownik324207
źródło
7

Dzięki tym wszystkim oficjalnym sugestiom, po prostu wybierzmy coś łatwiejszego, równie skutecznego i nieco prostszego.

pkill screen

Kto chce przejść do nieznanego i niepotrzebnego ekranu, aby wcisnąć kilka poleceń, których większość może ledwo zapamiętać? To w ogóle unika wchodzenia w to i natychmiast je zabija.

Plus, jeśli masz więcej niż jeden, to zajmie je wszystkie za jednym zamachem.

Brian Thomas
źródło
1
Pamiętaj, że spowoduje to zabicie wszystkich uruchomionych ekranów, które mogą, ale nie muszą, być tym, czego chcesz.
Mikkel
Nie jest to dobry wybór. Robię to od jakiegoś czasu. Czasami powoduje złe zachowania (np. Natychmiastowe wylogowanie z konta użytkownika). Ponadto, jak wspomniano @Mikkel, może to spowodować zamknięcie wszystkich ekranów, co nie byłoby tym, czego chcesz. Czasami musisz nadal uruchamiać niektóre (np. Niektóre są uruchamiane przez system) i zatrzymywać niektóre inne ekrany.
MAChitgarha,
2

Napotkałem ten problem podczas aktualizacji ekranu. screenKomenda zawiśnie przy próbie ponownego dołączenia sesji, niezależnie od tego, ile -Di -Rdodałam do komendy. Jednak screen -lswygodnie zapewnia pid sesji, umożliwiając interwencję przy użyciu następujących czynności:

10:42 user ~ $ screen -ls
There is a screen on:
        5730.my_screen     (Detached)
1 Socket in /tmp/screens/S-user.

10:42 user ~ $ sudo kill 5730

10:43 user ~ $ screen -ls
No Sockets found in /tmp/screens/S-user.

(Jest to podobne do odpowiedzi Briana Thomasa, ale zabije wszystkie uruchomione sesje ekranowe, co może nie być tym, czego chcesz, jeśli masz otwartych wiele ekranów, ale tylko jeden źle się zachowuje.)

Mikkel
źródło
Po 6 godzinach łamania głowy w Internecie ... Twoja odpowiedź była jedyną, która zadziałała. Dzięki stary!
kRazzy R
1

Tak jak ty, chciałem zabić moją sesję ekranową i dokumentacja okazała się nieprzydatna. Przekonany, że musi istnieć skrót klawiaturowy, przekonałem się, że
ctrl + ato \
działa

Następnie pojawia się monit: „Naprawdę wyjdź i zabij wszystkie okna [t \ n]”

Nie jestem pewien, dlaczego dokumentację mówi ctrl + awtedy ctrl + \. To nic dla mnie nie robi.

jaszczurka
źródło
1

Możesz znaleźć identyfikator procesu dołączonego ekranu uruchamiania. Znalazłem to tak samo, jak identyfikator sesji, który można uzyskać za pomocą polecenia:
screen -ls
I możesz użyć następującego polecenia, aby zabić ten proces:
kill [sessionId]lub
sudo kill [sessionId]
Możesz zabić ekran, nawet jeśli jest on podłączony w innym oknie terminala.

Siddhant
źródło
0

Naciśnij ctrl + d, aby zabić okno ekranu. Powtarzaj to, aż zabijesz wszystkie okna ekranu. Gdy skończysz, wszystkie okna systemu Windows zakończą sesję i zakończą się. Najkrótsze rozwiązanie, jeśli nie masz wielu okien

Diluszan
źródło