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
Maintenant, je veux rejoindre la session qui exécute ce processus. Donc, je démarre un nouveau terminal, et tapez 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 utilisez 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.
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-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 avez passé à -S
pour vous reconnecter:
screen -r myprog
(Je suis reconnecté à la session myprogramrunningunderscreen
)
J'ai eu un cas où screen -r
n'a pas réussi à se rattacher. Ajout du drapeau -d
afin 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.
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
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 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
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.
La sortie de screen -list
est au format 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)
...