Impossibile ripristinare lo schermo distaccato


11

Uso putty e ho una connessione wireless inaffidabile, quindi uso lo schermo per continuare il mio lavoro. Spesso mi disconnetto e quindi non riesco a ricollegare il mio schermo. Scapperò screen -D -RRe rimarrà lì a tempo indeterminato. Ho provato ctrl+za riavere la mia console, seguita da ps aux | grep screene poi kill -9per tutti i risultati, e poi di screen -D -RRnuovo ma ottengo gli stessi risultati. Provo qualsiasi combinazione di d e r che ti interessa menzionare, ma rimane comunque lì. Il mio schermo è lì, semplicemente non farà nulla, per lo meno riprenderà.

Qualcuno ha qualche suggerimento o trucco o idea su come far riprendere la mia sessione dello schermo?

Risposte:


16

L'ho visto quando ho lasciato cadere una connessione a uno schermo attivo e poi mi sono riconnesso. Il bug # 27462 ("Riconnetti le bancarelle quando si perde la sessione originale") descrive il problema come lo vedo io. Ciò che sembra accadere è che lo schermo sta cercando di avvisare il tty che lo tiene che sta per uscire, ma poiché il tty è bloccato a causa di una connessione interrotta, deve attendere che si verifichi il timeout (che è superiore a cinque minuti in alcuni casi).

Per risolverlo, faccio questo:

  • capire quale tty si sta aggrappando alla sessione dello schermo ps -ef | grep screen | grep pty
  • trova il bash di login associato a quel tty ps -ef | grep bash | grep $PTY
  • uccidi quel bastardo kill -KILL $PID

Questo fa sì che lo schermo completi correttamente la disconnessione e consente di riconnetterti normalmente.

Vedi qui per uno script di esempio che lo automatizza in qualche modo.


ps -ef | schermo grep | grep tty non stampa mai nulla perché ps -ef | Lo schermo grep non restituisce mai nulla con la stringa tty.
Dave Aaron Smith,

In realtà lo script di esempio sembra fare il trucco. Grazie!
Dave Aaron Smith,

1
Sì, intendevo "pty", non "tty".
David Mackintosh,

2

Ho avuto un problema simile con le mie sessioni sullo schermo. Li chiamo e li ho configurati come sessioni multiutente. Quello che ho scoperto è che elencava le mie sessioni ma mi diceva che non avevo nessuno a cui riconnettermi. Poi ho provato:

screen -x <session_name>

Ha lavorato come un campione!


1

Non posso dire di aver mai avuto problemi con lo schermo che non ritorna, indipendentemente dal tipo di connessione in cui mi trovo. Il mio solito metodo:

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

1
Ad esempio, screen-list restituisce 32322.mySession (allegato). Quindi vado a schermo -d mySession. Quindi screen -list restituisce ancora 32322.mySession (allegato) e screen -r mySession restituisce Non è necessario riprendere lo schermo corrispondente a daveSession.
Dave Aaron Smith,

hai provato solo "screen -d"?
Jason Antman,


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

0

Se sei intelligente come me, stavi cercando di riprendere una sessione dello schermo avviata come rootcon l'account utente normale. L' ls /var/run/screenho scoperto mostrandomi una directory perroot


0

Occasionalmente ho lo stesso problema (schermo -r -d non ripresa, non reattivo). Per risolvere, trova il terminale (tty / pty) associato alla sessione dello schermo:

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

Trova il terminale elencato (in questo esempio 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

Uccidi i processi su quel terminale (di solito la tua shell):

kill 12293

esegui di nuovo ps per assicurarti che non ci sia più. Altrimenti :

kill -9 12293

Sul mio server (gnu / linux), a volte dovrò uccidere -9 diverse volte finché non muore.

Dopo che tutti i processi su quel tty sono andati, lo schermo dovrebbe riprendere correttamente:

screen -r -d

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.