Rattachement à une session d'écran existante


82

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 tape 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 à utiliser beaucoup de fenêtres. "

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


Un moyen rapide de sélectionner un écran dans une liste de plusieurs écrans ouverts est screen -rsuivi du nombre 1, 2, 3 ... dans cette liste d'écrans.
user18099

Réponses:


92

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

Vous pouvez personnaliser les noms de session avec le -Sparamètre, sinon il utilise votre nom d’hôte (teamviggy), par exemple:

$ screen

(ctrl-A d se détacher)

$ screen -S myprogramrunningunderscreen

(ctrl-A d se 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 passez -Splus tard pour vous reconnecter:

screen -r myprog

(Je suis reconnecté à la myprogramrunningunderscreensession)


Que ctrl + aa fonctionne pour vous? J'appuie sur les touches Ctrl + a en même temps, puis à nouveau rapidement et rien ne se passe.
JohnMerlino

Oui; il y a une différence entre ctrl-A aet ctrl-A shift-A. Ce dernier m'a incité à Set window's title to:. Assurez-vous que vous appuyez sur shift pour le deuxième A.
Paul

Je fais: "screen -r 21tweet" et reçois comme réponse: "Il y a un écran sur: 3239.21tweet (21/08/2015 09:14:35) (En pièce jointe) Il n'y a pas d'écran à reprendre correspondant à 21tweet." Qu'est-ce que cela pourrait être?
Michael

Une mise en garde très peu évidente avec les sessions d'écran de nommage est que si vous les nommez avec -S, vous devez au moins utiliser une abréviation non ambiguë du nom suivant le numéro d'identification et un point dans le nom complet de la session d'écran lors de la reprise, contrairement à la méthode automatique. noms de session générés, où vous pouvez inclure l’ID et le point.
Spencer Williams

1
Typo, corrigé. Et ce site ne me laissera pas poster un commentaire aussi bref sans ajout de texte.
Paul

37

J'ai eu un cas où screen -rpas réussi à se rattacher. Ajout du -ddrapeau 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. Voir la page de manuel pour plus d'informations.


12

Un moyen facile est de simplement vous reconnecter à un écran arbitraire avec

screen -r

Ensuite, une fois que vous exécutez screen, vous pouvez obtenir une liste de tous les écrans actifs en appuyant sur Ctrl-A "(c.-à-d. 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 évidemment l'identification du bon.

Juste mes deux cents


okie comment je nomme mon écran?
austin

@austin screen -S <sessionname>
Brian

4

J'ai tendance à utiliser le combo suivant lorsque j'ai besoin de travailler sur plusieurs machines dans plusieurs clusters:

screen -S clusterX

Cela 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, il utilise la première.

Un grand bravo à https://support.dvsus.com/hc/en-us/articles/212925186-Linux-GNU-Screen-instructions pour cette astuce il y a quelque temps.

MODIFIER:

Voici également quelques explications utiles man screensur 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 -Dalors assurez-vous de vérifierman screen


2

La sortie de screen -listest 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)
...

1
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.
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.