Erneutes Anfügen an eine vorhandene Bildschirmsitzung


81

Ich habe ein Programm, das unter Bildschirm läuft. Tatsächlich kann ich, wenn ich mich von der Sitzung trenne und netstat überprüfe, sehen, dass das Programm noch läuft (was ich will):

udp        0      0 127.0.0.1:1720          0.0.0.0:*                           3759/ruby       

Jetzt möchte ich mich wieder mit der Sitzung verbinden, die diesen Prozess ausführt. Also starte ich ein neues Terminal und tippe screen -r ein

$ screen -r
There are several suitable screens on:
    5169.pts-2.teamviggy    (05/31/2013 09:30:28 PM)    (Detached)
    4872.pts-2.teamviggy    (05/31/2013 09:25:30 PM)    (Detached)
    4572.pts-2.teamviggy    (05/31/2013 09:07:17 PM)    (Detached)
    4073.pts-2.teamviggy    (05/31/2013 08:50:54 PM)    (Detached)
    3600.pts-2.teamviggy    (05/31/2013 08:40:14 PM)    (Detached)
Type "screen [-d] -r [pid.]tty.host" to resume one of them.

Aber woher weiß ich, in welcher Sitzung der von mir erstellte Prozess abläuft?

Nun sagte eines der Dokumente, auf die ich gestoßen bin:

"Wenn Sie ein Fenster verwenden, geben Sie Ca A ein, um ihm einen Namen zu geben. Dieser Name wird in der Fensterliste verwendet und hilft Ihnen dabei, sich zu erinnern, was Sie in jedem Fenster tun, wenn Sie viele Fenster verwenden. "

Wenn ich mich in einer neuen Bildschirmsitzung befinde, versuche ich, die Tastenkombination + A zu drücken, und es passiert nichts.


Auf eine schnelle Möglichkeit, einen Bildschirm aus einer Liste mit mehreren geöffneten Bildschirmen auszuwählen , screen -rfolgt die Nummer 1, 2, 3 ... in dieser Liste der Bildschirme.
user18099

Antworten:


91

Hierbei handelt es sich um zwei Ebenen von "Listings". Erstens haben Sie die "Fensterauflistung" innerhalb einer einzelnen Sitzung, für die Strg-A A steht, und zweitens gibt es eine "Sitzungsauflistung", mit der Sie Ihre Frage eingefügt haben und die auch angezeigt werden kann screen -ls.

Sie können die Sitzungsnamen mit dem -SParameter anpassen. Andernfalls wird Ihr Hostname (teamviggy) verwendet. Beispiel:

$ screen

(Strg-A d zum Trennen)

$ screen -S myprogramrunningunderscreen

(Strg-A d zum Trennen)

$ screen -ls

There are screens on:
    4964.myprogramrunningunderscreen    (05/31/2013 09:42:29 PM)    (Detached)
    4874.pts-1.creeper  (05/31/2013 09:39:12 PM)    (Detached)
2 Sockets in /var/run/screen/S-paul.

Als Bonus können Sie eine eindeutige Abkürzung des Namens verwenden, an den Sie -Sspäter weitergeben, um die Verbindung wiederherzustellen:

screen -r myprog

(Ich bin wieder mit der myprogramrunningunderscreenSitzung verbunden)


Funktioniert die Tastenkombination Strg + Aa für Sie? Ich drücke gleichzeitig control + a und drücke dann schnell wieder a und es passiert nichts.
JohnMerlino

Ja; Es gibt einen Unterschied zwischen ctrl-A aund ctrl-A shift-A. Letzteres veranlasste mich dazu Set window's title to:. Stellen Sie sicher, dass Sie die Umschalttaste für das zweite A drücken.
Paul

Ich mache: "screen -r 21tweet" und erhalte als Antwort: "Es gibt einen Bildschirm auf: 3239.21tweet (08/21/2015 09:14:35 AM) (Attached) Es gibt keinen Bildschirm, der mit 21tweet übereinstimmt." Was könnte das sein?
Michael

Eine sehr nicht offensichtliche Einschränkung bei der Benennung von Bildschirmsitzungen ist, dass Sie, wenn Sie sie mit -Sbenennen, im Gegensatz zur automatischen Benennung mindestens eine eindeutige Abkürzung des Namens verwenden müssen, die der ID-Nummer und dem Punkt im vollständigen Namen der Bildschirmsitzung folgt, wenn Sie fortfahren generierte Sitzungsnamen, in denen Sie die ID und den Punkt einfügen können.
Spencer Williams

1
Tippfehler, behoben. Und auf dieser Seite kann ich keinen so kurzen Kommentar ohne zusätzlichen Text veröffentlichen.
Paul

37

Ich hatte einen Fall, in dem es nicht screen -rgelungen war, ihn wieder anzubringen. Hinzufügen der -dFlagge so sah es so aus

screen -d -r

arbeitete für mich. Es löste den vorherigen Bildschirm und ermöglichte mir das erneute Anbringen. Weitere Informationen finden Sie auf der Man Page.


12

Eine einfache Möglichkeit besteht darin, einfach eine Verbindung zu einem beliebigen Bildschirm mit herzustellen

screen -r

Sobald Sie screen ausgeführt haben, können Sie eine Liste aller aktiven Bildschirme anzeigen, indem Sie auf Ctrl-A "(dh Strg-A, gefolgt von einem doppelten Anführungszeichen) klicken. Dann können Sie einfach die aktiven Bildschirme einzeln auswählen und sehen, was sie gerade ausführen. Die Benennung der Bildschirme erleichtert natürlich die Identifizierung des richtigen.

Nur meine zwei Cent


okie wie ich meinen Bildschirm benenne?
Austin

@austin screen -S <Sitzungsname>
Brian

4

Ich benutze normalerweise die folgende Kombination, wenn ich auf mehreren Computern in mehreren Clustern arbeiten muss:

screen -S clusterX

Dadurch wird eine neue Bildschirmsitzung erstellt, in der ich die Umgebung aufbauen kann.

screen -dRR clusterX

Dies ist, was ich später benutze, um diese Bildschirmsitzung wieder zu verbinden. Die fünfzig Bits sind, dass, wenn die Sitzung an einer anderen Stelle angehängt wird, diese andere Anzeige getrennt wird. Darüber hinaus wird eine Sitzung erstellt, wenn es aus irgendeinem Grund keine Sitzung gibt, z. B. wenn jemand meinen Server ohne mein Wissen neu gestartet hat. Endlich. Wenn mehrere Sitzungen vorhanden sind, wird die erste verwendet.

Ein großes Lob an https://support.dvsus.com/hc/en-us/articles/212925186-Linux-GNU-Screen-instructions für diesen Tipp vor einiger Zeit.

BEARBEITEN:

Auch hier einige nützliche Erklärungen man screenzu kryptischen Parametern

       -d -r   Reattach a session and if necessary detach it first.

       -d -R   Reattach a session and if necessary detach or  even  create  it
               first.

       -d -RR  Reattach  a  session  and if necessary detach or create it. Use
               the first session if more than one session is available.

       -D -r   Reattach a session. If necessary  detach  and  logout  remotely
               first.

Es gibt noch mehr mit -D, also achten Sie darauf, zu überprüfenman screen


2

Die Ausgabe von screen -listist wie folgt formatiert pid.tty.host. Die Pids können verwendet werden, um den ersten untergeordneten Prozess zu erhalten mit pstree:

screen -list|cut -f1 -d'.'|cut -f2|xargs -n 1 pstree -p|grep "^screen"

Sie erhalten eine solche Liste

screen(5169)---zsh(5170)---less(15268)
screen(4872)---zsh(4873)-+-cat(11364)
...

1
screen -d -r 4964

oder

screen -d -r 4874

$ screen -ls
There are screens on:
4964.myprogramrunningunderscreen    (05/31/2013 09:42:29 PM)    (Detached)
4874.pts-1.creeper  (05/31/2013 09:39:12 PM)    (Detached)
2 Sockets in /var/run/screen/S-paul.
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.