Der abgetrennte Bildschirm kann nicht fortgesetzt werden

11

Ich benutze Kitt und habe eine unzuverlässige drahtlose Verbindung, daher benutze ich den Bildschirm, um meine Arbeit am Laufen zu halten. Oft werde ich getrennt und kann meinen Bildschirm dann nicht wieder anbringen. Ich werde rennen screen -D -RRund es wird einfach auf unbestimmte Zeit dort sitzen. Ich habe versucht ctrl+z, meine Konsole zurückzubekommen, gefolgt von ps aux | grep screenund dann kill -9für alle Ergebnisse und dann screen -D -RRwieder, aber ich erhalte die gleichen Ergebnisse. Ich versuche jede Kombination von d und r, die Sie erwähnen möchten, aber es sitzt immer noch da. Mein Bildschirm ist da, er macht einfach nichts, am allerwenigsten wieder.

Hat jemand Tipps, Tricks oder Ideen, wie ich meine Bildschirmsitzung wieder aufnehmen kann?

Dave Aaron Smith
quelle

Antworten:

15

Ich habe dies gesehen, als ich eine Verbindung zu einem aktiven Bildschirm abbrach und dann die Verbindung wieder herstellte. Fehler # 27462 (" Stellt die Verbindung wieder her, wenn die ursprüngliche Sitzung verloren geht") beschreibt das Problem so, wie ich es sehe. Was zu passieren scheint, ist, dass der Bildschirm versucht, das tty, das es hält, zu benachrichtigen, dass es kurz vor dem Verlassen steht. Da das tty jedoch aufgrund einer unterbrochenen Verbindung hängen bleibt, muss es auf das Timeout warten (das über fünf Minuten liegt) in manchen Fällen).

Um das Problem zu beheben, mache ich Folgendes:

  • Finden Sie heraus, welche tty an der Bildschirmsitzung festhält ps -ef | grep screen | grep pty
  • Suchen Sie die Login-Bash, die diesem tty zugeordnet ist ps -ef | grep bash | grep $PTY
  • töte diese Bash kill -KILL $PID

Dadurch wird die Trennung des Bildschirms korrekt abgeschlossen, und Sie können die Verbindung normal wiederherstellen.

Hier finden Sie ein Beispielskript, das dies etwas automatisiert.

David Mackintosh
quelle
ps -ef | grep screen | grep tty druckt nie etwas, weil ps -ef | grep screen gibt niemals etwas mit der Zeichenfolge tty zurück.
Dave Aaron Smith
Eigentlich scheint das Beispielskript den Trick zu tun. Vielen Dank!
Dave Aaron Smith
1
Ja, ich meinte "pty", nicht "tty".
David Mackintosh
2

Ich hatte ein ähnliches Problem mit meinen Bildschirmsitzungen. Ich benenne sie und lasse sie als Mehrbenutzersitzungen einrichten. Was ich fand, war, dass es meine Sitzungen auflistete, mir aber sagte, dass ich keine hatte, mit der ich mich wieder verbinden konnte. Dann habe ich versucht:

screen -x <session_name>

Es hat funktioniert wie ein Champion!

Doug Noel
quelle
1

Ich kann nicht sagen, dass ich jemals ein Problem damit hatte, dass der Bildschirm nicht zurückkommt, egal auf welcher Art von Verbindung ich mich befinde. Meine übliche Methode:

ssh myname@foo
screen -S sessionName
(do my work... get disconnected...)

ssh myname@foo
screen -d (just to make sure anything wasn't left attached)
screen -r sessionName
Jason Antman
quelle
1
Zum Beispiel gibt die Bildschirmliste 32322.mySession (Attached) zurück. Dann überprüfe ich -d mySession. Dann gibt screen -list immer noch 32322.mySession (Attached) zurück und screen -r mySession gibt zurück. Es gibt keinen Bildschirm, der mit daveSession fortgesetzt werden kann.
Dave Aaron Smith
hast du nur "screen -d" ausprobiert?
Jason Antman
0

Ist es möglich, dass dieser Fehler Sie betrifft?

http://savannah.gnu.org/bugs/?27462

Können Sie versuchen, die von ihnen empfohlene Problemumgehung durchzuführen und festzustellen, ob sie funktioniert?

Kyle-tummy.com
quelle
Die Problemumgehung ergab für mich keinen Sinn. Meine Ausgabe von ps -ef | grep screen sieht überhaupt nicht wie im Beispiel aus.
Dave Aaron Smith
0

Soulrce: https://kb.iu.edu/data/ahrm.html

To see your existing screen sessions, enter:
  screen -list
This will display a list of your current screen sessions. For instance, if you had one attached screen, you would see:

         1636.pts-21.hostname      (Attached)

To detach an attached screen, enter:
  screen -D
If you have more than one attached screen, you can specify a particular screen to detach. For example, to detach the screen in the above example, you would enter:
  screen -D 1636.pts-21.hostname
giorgio79
quelle
0

Wenn Sie so schlau sind wie ich, haben Sie versucht, eine Bildschirmsitzung fortzusetzen, die wie rootmit dem regulären Benutzerkonto gestartet wurde . ls /var/run/screenIch habe das herausgefunden, indem ich ein Verzeichnis für gezeigt haberoot

uhFocuz
quelle
0

Ich habe gelegentlich das gleiche Problem (Bildschirm -r -d wird nicht fortgesetzt, reagiert nicht). Suchen Sie zum Beheben das Terminal (tty / pty), das der Bildschirmsitzung zugeordnet ist:

screen -list
There is a screen on:
    28176.pts-51.localhost        (Attached)
1 Socket in /tmp/uscreens/S-xxxx.

Suchen Sie das aufgelistete Terminal (in diesem Beispiel pts-51):

ps axuw | grep 'pts/51'   # will vary depending upon how pty's are named
you     12293  0.0  0.2  2148 1128 pts/51   Ss   10:34   0:00 -bash

Beenden Sie die Prozesse auf diesem Terminal (normalerweise Ihre Shell):

kill 12293

Führen Sie ps erneut aus, um sicherzustellen, dass es nicht mehr vorhanden ist. Wenn nicht :

kill -9 12293

Auf meinem Server (gnu / linux) muss ich manchmal -9 mehrmals töten, bis es stirbt.

Nachdem alle Prozesse auf diesem tty beendet sind, sollte der Bildschirm korrekt fortgesetzt werden:

screen -r -d
tb303
quelle
-1

Entfernen Sie tote Bildschirme mit screen -wipe.

Gerçek Karakuş
quelle
Ich denke, das ist genau das Gegenteil von dem, was er versucht zu tun.
Chris S