Rattacher une session d'écran existante

61

J'ai un programme sous l'écran. En fait, lorsque je me déconnecte de la session et que je vérifie netstat, je peux voir que le programme est toujours en cours d'exécution (ce que je veux):

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

Je souhaite maintenant rattacher la session à celle qui exécute ce processus. Je lance donc un nouveau terminal et saisis 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.

Mais comment savoir quelle est la session exécutant le processus que j'ai créé?

Maintenant, l'un des documents que j'ai rencontrés disait:

"Lorsque vous utilisez une fenêtre, tapez Ca A pour lui donner un nom. Ce nom sera utilisé dans la liste des fenêtres et vous aidera à vous rappeler ce que vous faites dans chaque fenêtre lorsque vous commencez à en utiliser beaucoup des fenêtres. "

Le problème, c’est que lorsque je suis dans une nouvelle session d’écran, j’essaie d’appuyer sur les touches Ctrl + A et qu’il ne se passe rien.

    
posée JohnMerlino 01.06.2013 - 03:39
la source

6 réponses

73

Il y a deux niveaux de "listes" impliqués ici. Premièrement, vous avez la "liste de fenêtres" dans une session individuelle, ce à quoi sert ctrl-A A, et deuxièmement, il y a une "liste de session" qui est ce que vous avez collé dans votre question et que vous pouvez également afficher avec screen -ls .

Vous pouvez personnaliser les noms de session avec le paramètre -S . Sinon, il utilise votre nom d'hôte (teamviggy), par exemple:

$ screen

(ctrl-D à détacher)

$ screen -S myprogramrunningunderscreen

(ctrl-D à détacher)

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

En prime, vous pouvez utiliser une abréviation non équivoque du nom que vous avez transmis à -S plus tard pour vous reconnecter:

screen -r myprog

(Je suis reconnecté à la session myprogramrunningunderscreen )

    
réponse donnée Paul 01.06.2013 - 04:48
la source
18

J'ai eu un cas où screen -r n'a pas réussi à se rattacher. Ajouter le drapeau -d pour qu'il ressemble à ceci

screen -d -r

a travaillé pour moi. Il a détaché l'écran précédent et m'a permis de le rattacher. Consultez la page de manuel pour plus d'informations.

    
réponse donnée njcwotx 01.12.2016 - 21:31
la source
11

Une méthode simple consiste à simplement vous reconnecter à un écran arbitraire avec

.
screen -r

Ensuite, lorsque vous exécutez screen, vous pouvez obtenir la liste de tous les écrans actifs en appuyant sur Ctrl-A " (c'est-à-dire, control-A suivi d'un guillemet double). Ensuite, vous pouvez simplement sélectionner les écrans actifs un par un et voir ce qu’ils exécutent. Nommer les écrans facilitera bien sûr l’identification du bon écran.

Seulement mes deux cents

    
réponse donnée Dr K 08.07.2015 - 17:36
la source
2

J'ai tendance à utiliser le combo suivant lorsque je dois travailler sur plusieurs machines de plusieurs clusters:

screen -S clusterX

Ceci crée la nouvelle session d'écran où je peux construire l'environnement.

screen -dRR clusterX

C’est ce que j’utilise par la suite pour me rattacher à cette session d’écran. Les astuces sont que si la session est attachée ailleurs, elle détache cet autre affichage. De plus, s'il n'y a pas de session pour une raison étrange, comme si quelqu'un redémarrait mon serveur sans que je le sache, il en crée une. Finalement. si plusieurs sessions existent, la première est utilisée.

Félicitations au lien pour cette astuce quelque temps retour.

EDIT:

Voici également quelques explications utiles de man screen sur les paramètres cryptiques

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

il y a plus avec -D alors assurez-vous de vérifier man screen

    
réponse donnée Lefty G Balogh 04.01.2018 - 11:01
la source
1

La sortie de screen -list est formatée comme pid.tty.host . Les pids peuvent être utilisés pour obtenir le premier processus enfant avec pstree :

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

Vous obtiendrez une liste comme celle-ci

screen(5169)---zsh(5170)---less(15268)
screen(4872)---zsh(4873)-+-cat(11364)
...
    
réponse donnée tilnam 14.03.2018 - 18:12
la source
0
screen -d -r 4964

ou

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.
    
réponse donnée 24.08.2018 - 04:21
la source

Lire d'autres questions sur les étiquettes