Ricollegamento a una sessione dello schermo esistente


82

Ho un programma in esecuzione sotto lo schermo. In effetti, quando mi disconnetto dalla sessione e controllo netstat, posso vedere che il programma è ancora in esecuzione (che è quello che voglio):

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

Ora voglio ricollegare alla sessione che esegue quel processo. Quindi avvio un nuovo terminale e digito screen -r

$ 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.

Ma come faccio a sapere qual è la sessione che esegue quel processo che ho creato?

Ora uno dei documenti che ho trovato diceva:

"Quando usi una finestra, digita Ca A per dargli un nome. Questo nome verrà usato nell'elenco delle finestre e ti aiuterà a ricordare cosa stai facendo in ogni finestra quando inizi a usare molte finestre. "

Il fatto è che quando sono in una nuova sessione dello schermo, provo a premere control + a A e non succede nulla.


Un modo rapido per selezionarne uno da un elenco di più schermate aperte, è screen -rseguito da un numero 1, 2, 3 ... in tale elenco di schermate.
user18099

Risposte:


92

Ci sono due livelli di "elenchi" coinvolti qui. Innanzitutto, hai una "lista di finestre" all'interno di una singola sessione, che è ciò che ctrl-A A sta per, e in secondo luogo c'è una "lista di sessioni" che è ciò che hai incollato nella tua domanda e con ciò che può anche essere visualizzato screen -ls.

È possibile personalizzare i nomi delle sessioni con il -Sparametro, altrimenti utilizza il nome host (teamviggy), ad esempio:

$ screen

(ctrl-A d per staccare)

$ screen -S myprogramrunningunderscreen

(ctrl-A d per staccare)

$ 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.

Come bonus, puoi usare un'abbreviazione inequivocabile del nome che passi in -Sseguito per riconnetterti:

screen -r myprog

(Sono ricollegato alla myprogramrunningunderscreensessione)


Che ctrl + aa funziona per te? Premo control + a contemporaneamente e poi premo di nuovo rapidamente a e non succede nulla.
John Merlino,

Sì; c'è una differenza tra ctrl-A ae ctrl-A shift-A. Quest'ultimo mi ha spinto a farlo Set window's title to:. Assicurati di premere il tasto MAIUSC per il secondo A.
Paul

Faccio: "screen -r 21tweet" e ottengo come risposta: "C'è uno schermo su: 3239.21tweet (21/08/2015 09:14:35) (allegato) Non è necessario riprendere lo schermo corrispondente a 21tweet." Cosa potrebbe essere?
Michael,

Un avvertimento molto ovvio con la denominazione delle sessioni dello schermo è che se le si assegna al nome -S, è necessario utilizzare almeno un'abbreviazione univoca del nome che segue il numero ID e il punto nel nome completo della sessione dello schermo quando si riprende, a differenza del metodo automatico nomi di sessione generati, in cui è possibile includere l'ID e il punto.
Spencer Williams,

1
Errore di battitura, fisso. E questo sito non mi permette di pubblicare un commento così breve senza qualche testo aggiuntivo.
Paul

37

Ho avuto un caso in cui screen -rnon è stato possibile ricollegarlo. Aggiungendo la -dbandiera così sembrava così

screen -d -r

ha funzionato per me. Ha staccato la schermata precedente e mi ha permesso di ricollegarla. Vedi la Man Page per maggiori informazioni.


12

Un modo semplice è semplicemente riconnettersi a uno schermo arbitrario con

screen -r

Quindi, una volta eseguita la schermata, puoi ottenere un elenco di tutte le schermate attive premendo Ctrl-A "(ovvero control-A seguito da una doppia virgoletta). Quindi puoi selezionare le schermate attive una alla volta e vedere cosa stanno eseguendo. La denominazione delle schermate, ovviamente, faciliterà l'identificazione di quella giusta.

Solo i miei due centesimi


okie come chiamo il mio schermo?
Austin

@austin screen -S <sessionname>
Brian

4

Tendo a utilizzare la seguente combinazione in cui ho bisogno di lavorare su più macchine in diversi cluster:

screen -S clusterX

Questo crea la nuova sessione dello schermo in cui posso creare l'ambiente.

screen -dRR clusterX

Questo è quello che uso successivamente per ricollegarmi a quella sessione dello schermo. I bit nifty sono che se la sessione è collegata altrove, si stacca quell'altro display. Inoltre, se non esiste una sessione per qualche strana ragione, come qualcuno che ha riavviato il mio server a mia insaputa, ne crea una. Finalmente. se esistono più sessioni, utilizza la prima.

Tanti complimenti a https://support.dvsus.com/hc/en-us/articles/212925186-Linux-GNU-Screen-istruzioni per questo suggerimento qualche tempo fa.

MODIFICARE:

Inoltre, ecco alcune utili spiegazioni man screensui parametri criptici

       -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.

c'è di più con -Dquindi assicurati di controllareman screen


2

L'output di screen -listè formattato come pid.tty.host. I pids possono essere usati per ottenere il primo processo figlio con pstree:

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

Otterrai un elenco come questo

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

1
screen -d -r 4964

o

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.
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.