115 votes

Rattachement à une session d'écran existante

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

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

Maintenant, je veux me rattacher à la session qui exécute ce processus. Je démarre donc un nouveau terminal, et je 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 laquelle est la session qui exécute le processus que j'ai créé ?

Un des documents sur lesquels je suis tombé dit :

"Lorsque vous utilisez une fenêtre, tapez C-a A pour lui donner un nom. Ce nom sera utilisé dans la liste des fenêtres et vous aidera à vous souvenir de ce que vous faites dans chaque fenêtre lorsque vous commencerez à utiliser de nombreuses fenêtres."

Le problème est que lorsque je suis dans une nouvelle session d'écran, j'essaie d'appuyer sur control+a A et rien ne se passe.

118voto

Paul Points 6359

Il y a deux niveaux de "listings" impliqués ici. Tout d'abord, il y a la "liste des fenêtres" au sein d'une session individuelle, à laquelle sert Ctrl-A-A, et ensuite, il y a la "liste des sessions", qui est ce que vous avez collé dans votre question et qui peut également être visualisée avec la touche screen -ls .

Vous pouvez personnaliser les noms de session avec l'option -S sinon il utilise votre nom d'hôte (teamviggy), par exemple :

$ screen

(ctrl-A d pour détacher)

$ screen -S myprogramrunningunderscreen

(ctrl-A d pour 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 ambiguë du nom que vous transmettez à -S plus tard pour se reconnecter :

screen -r myprog

(Je suis reconnecté au myprogramrunningunderscreen session)

77voto

Roger Roelofs Points 59

J'ai eu un cas où screen -r n'a pas réussi à se rattacher. En ajoutant le -d de sorte que cela ressemble à ceci

screen -d -r

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

18voto

Dr K Points 281

Une manière simple est de se reconnecter à un écran arbitraire avec

screen -r

Ensuite, une fois que vous avez lancé l'écran, vous pouvez obtenir une liste de tous les écrans actifs en appuyant sur la touche Ctrl-A " (c'est-à-dire control-A suivi d'une double citation). Vous pouvez alors sélectionner les écrans actifs un par un et voir ce qu'ils exécutent. En nommant les écrans, il sera bien sûr plus facile d'identifier le bon écran.

Juste mes deux cents

6voto

Lefty G Balogh Points 245

J'ai tendance à utiliser la combinaison suivante lorsque je dois travailler sur plusieurs machines dans plusieurs clusters :

screen -S clusterX

Cela crée une 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. Ce qui est intéressant, c'est que si la session est attachée ailleurs, elle détache cet autre écran. De plus, s'il n'y a pas de session pour une raison bizarre, comme quelqu'un qui a redémarré mon serveur sans que je le sache, elle en crée une. Enfin, si plusieurs sessions existent, elle utilise la première.

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

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 n'oubliez pas de vérifier man screen

3voto

tilnam Points 31

La sortie de screen -list est formaté comme suit 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)
...

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X