Beenden Sie eine Bildschirmsitzung


65

Ich versuche, eine Bildschirmsitzung zu beenden. Ich habe viele andere verwandte Fragen bemerkt, aber keine dieser Antworten funktioniert für mich. Ich versuche folgende Sitzung zu beenden:

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

Jetzt bin ich in der Sitzung. Nach der Dokumentation:

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

Ich soll "control a" und dann "control \" drücken. Ich mache das und nichts passiert.

Eine andere Lösung soll Ctrl+ drücken aund Folgendes eingeben: quit. Aber auch hier macht es nichts. Tatsächlich passiert nach dem Drücken von control+ aabsolut nichts außer der Meldung "No Other Window" (Kein anderes Fenster).


1
auf dem Bildschirm v4.x, um alle Sitzungen zu beenden,ps aux | grep "SCREEN" | awk '{print $2}' | xargs kill
Fredrick Gauss

2
Für die Aufzeichnung können Sie nur screen -r porkypigoder tun screen -r 23520, anstatt die vollständige Zeichenfolge einschließen zu müssen. Bildschirmnamen sollen die Dinge einfacher machen, nicht komplizierter.
Mikkel

Antworten:


73

Zunächst müssen Sie die Bildschirmsitzung
screen -r 23520wie gewohnt erneut verbinden. Drücken Sie dann ctrl+ aund dann ein Großbuchstaben Kund drücken ySie, wenn Sie gefragt werden, ob Sie die Sitzung wirklich beenden möchten


2
Dies funktioniert, wenn ein Problem mit einem auf dem Bildschirm ausgeführten Prozess vorliegt, nicht jedoch, wenn ein Problem mit dem Bildschirm selbst vorliegt. Dies ist in 99% der Fälle der Fall und hat den zusätzlichen Vorteil, dass nur ein einziges Fenster auf dem Bildschirm betroffen ist, anstatt alle Fenster zu beenden.
Mikkel

1
Es ist ein Fenster zu töten, keine Sitzung
Eric Wang

53

Sie können diesen Bildschirm schließen, ohne ihn anzuhängen. Finden Sie zuerst die Sitzung:

$ screen -ls

und dann kündige es:

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

(-X = Befehl ausführen, -S Sitzungs-PID, auf der ausgeführt werden soll)

[AKTUALISIEREN]

Beispiel:

screen -XS 20411 quit

1
Das war ziemlich einfach. Sie können es noch weiter vereinfachen, indem Sie -X -S mit -XS
AJ

2
Sie sollten innaM answer gutschreiben, wenn Sie es kopieren
Martin Thoma

8

Dadurch werden alle getrennten Bildschirme abgebrochen:

screen -ls | grep losgelöst | cut -d. -f1 | awk '{print $ 1}' | Xargs töten

Dadurch werden alle angeschlossenen oder getrennten Bildschirme abgebrochen

screen -ls | grep pts | cut -d. -f1 | awk '{print $ 1}' | Xargs töten

7

Lassen Sie uns also mit all diesen offiziellen Vorschlägen etwas einfacheres, ebenso effektives und geradlinigeres anstreben.

pkill screen

Wer möchte einen unbekannten und nicht benötigten Bildschirm aufrufen, um ein paar Befehle einzugeben, an die sich die meisten vielleicht kaum erinnern? Dies vermeidet, überhaupt darauf einzugehen, und tötet es sofort.

Plus, wenn Sie mehr als eine haben, wird dies sie alle auf einen Schlag nehmen.


1
Beachten Sie, dass dies alle laufenden Bildschirme abbricht, die möglicherweise nicht Ihren Wünschen entsprechen.
Mikkel

Keine gute Wahl. Ich mache es seit einiger Zeit. Manchmal führt dies zu schlechten Verhaltensweisen (z. B. sofortiges Abmelden von Ihrem Benutzerkonto). Wie @Mikkel bereits erwähnt hat, kann es auch dazu kommen, dass alle Bildschirme geschlossen werden. Manchmal müssen Sie einige weiter ausführen (z. B. einige werden vom System ausgeführt) und andere Bildschirme anhalten.
MAChitgarha

2

Beim Aktualisieren des Bildschirms ist dieses Problem aufgetreten. Der screenBefehl blieb hängen, wenn versucht wurde, die Sitzung erneut zuzuordnen, unabhängig davon, wie viele -Doder wie viele -Rdem Befehl hinzugefügt wurden. screen -lsStellt jedoch bequem die PID der Sitzung bereit, sodass Sie wie folgt eingreifen können:

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.

(Dies ähnelt der Antwort von Brian Thomas, aber er beendet alle laufenden Bildschirmsitzungen. Dies ist möglicherweise nicht das, was Sie möchten, wenn Sie mehrere Bildschirme geöffnet haben, aber nur einen, der sich schlecht benimmt.)


Nach 6 Stunden, die mir im Internet den Kopf zerbrochen haben, war deine Antwort die einzige, die funktionierte. Danke Kumpel!
kRazzy R

1

Wie Sie wollte ich meine Bildschirmsitzung beenden und fand die Dokumentation nicht hilfreich. Überzeugt, dass es eine Tastenkombination geben muss , fand ich, dass das
ctrl + adann \
funktioniert

Ich erhalte dann die Aufforderung: "Beende wirklich alle deine Fenster [y \ n] und töte sie"

Ich bin nicht sicher, warum die Dokumentation ctrl + adann sagt ctrl + \. Das bringt mir nichts.


1

Sie finden die Prozess-ID des angehängten Ausführungsbildschirms. Ich habe es genauso gefunden wie die Sitzungs-ID, die Sie mit dem Befehl erhalten:
screen -ls
Und Sie können den folgenden Befehl verwenden, um diesen Prozess abzubrechen:
kill [sessionId]oder
sudo kill [sessionId]
Sie können den Bildschirm auch dann abbrechen, wenn er in einem anderen Terminalfenster angehängt ist.


0

Drücken Sie Strg + d, um das Bildschirmfenster zu schließen. Wiederholen Sie diesen Vorgang, bis Sie alle Bildschirmfenster geschlossen haben. Sobald Sie alle Windows-Bildschirm ausgeführt haben, wird die Sitzung beendet und beendet. Kürzeste Lösung, wenn Sie nicht viele Fenster haben

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.