301 votes

Comment lister les sessions d'écran en cours ?

J'ai plusieurs serveurs, sur lesquels je réalise des expériences en utilisant screen . La procédure est la suivante :

  1. ssh au serveur XXX
  2. lancement screen
  3. commencer les expériences dans quelques onglets
  4. détacher screen
  5. se déconnecter du serveur

Pendant que les expériences sont en cours, je peux facilement trouver sur quels serveurs elles se trouvent en ssh à tous les serveurs et à la liste des processus en cours (en utilisant la fonction top ou ps ).

Cependant, une fois les expériences terminées, comment pourrais-je savoir sur quels serveurs j'ai une session d'écran ouverte (afin de pouvoir jeter un coup d'œil aux résultats, les relancer, etc.

PS : mes expériences impriment également leurs résultats dans des fichiers... mais ce n'est pas le sujet de ma question.

518voto

joshperry Points 17727

Pour répertorier toutes les sessions d'écran d'un utilisateur, exécutez la commande suivante en tant que cet utilisateur :

screen -ls

Pour voir toutes les sessions d'écran sur une machine spécifique, vous pouvez faire :

ls -laR /var/run/screen/

J'obtiens ceci sur ma machine :

gentle ~ # ls -laR /var/run/screen/

/var/run/screen/:
total 1
drwxrwxr-x  4 root utmp   96 Mar  1  2005 .
drwxr-xr-x 10 root root  840 Feb  1 03:10 ..
drwx------  2 josh users  88 Jan 13 11:33 S-josh
drwx------  2 root root   48 Feb 11 10:50 S-root

/var/run/screen/S-josh:
total 0
drwx------ 2 josh users 88 Jan 13 11:33 .
drwxrwxr-x 4 root utmp  96 Mar  1  2005 ..
prwx------ 1 josh users  0 Feb 11 10:41 12931.pts-0.gentle

/var/run/screen/S-root:
total 0
drwx------ 2 root root 48 Feb 11 10:50 .
drwxrwxr-x 4 root utmp 96 Mar  1  2005 ..

Les fichiers sont des Sockets Unix.

1 votes

Je me demande pourquoi cette réponse, qui répondait parfaitement à la question, a reçu un downvote...

2 votes

Si vous souhaitez obtenir un écran spécifique basé sur une convention d'appellation, vous pouvez également lire le résultat. ls -R /var/run/screen/S-root/ | grep "NamingConvention" . Les écrans sont enregistrés dans le <pid>.<screen_name> format. Ceci est utile pour les bash scripts. Donc si vous avez un écran avec le nom 0000.NamingConvention il retournera littéralement le nom des écrans que vous recherchez dans un format facile à analyser.

24voto

Zoredache Points 8873

La commande écran -liste peut être ce que vous voulez.

Voir le homme

14voto

Lohoris Points 5349

Bien que la réponse de joshperry soit correcte, je trouve très ennuyeux qu'il ne vous indique pas le nom d'écran (celui que vous avez défini avec l'option -t), qui est en fait ce que vous utilisez pour identifier une session. (ce n'est pas sa faute, bien sûr, c'est le défaut d'un écran)

C'est pourquoi j'utilise plutôt un script tel que celui-ci : ps auxw|grep -i screen|grep -v grep

2 votes

Jetez un coup d'œil à l'option -S. La valeur fournie est stockée dans le nom de fichier de la socket unix et est visible dans l'option ls sortie. Si vous en avez besoin, vous pouvez également conserver l'option -t.

0 votes

L'option -S est excellente, car elle vous permet également de reprendre par ce nom de session : screen -rd <sessionname>

12voto

skinp Points 2096

Je ne suis pas vraiment sûr de votre question, mais si tout ce que vous voulez vraiment est la liste des sessions d'écran actuellement ouvertes, essayez :

screen -ls

5voto

ObiWahn Points 81

Dans la plupart des cas, un screen -RRx $username/ suffira :)

Si vous voulez toujours lister tous les écrans, alors mettez ce qui suit . script dans votre chemin et appelez-le screen ou ce que vous voulez :

#!/bin/bash
if [[ "$1" != "-ls-all" ]]; then
    exec /usr/bin/screen "$@"
else
    shopt -s nullglob
    screens=(/var/run/screen/S-*/*)
    if (( ${#screens[@]} == 0 )); then
        echo "no screen session found in /var/run/screen"
    else
        echo "${screens[@]#*S-}"
    fi
fi

Il se comportera exactement comme screen sauf qu'il montrera toutes les sessions screen, en donnant l'option -ls-all comme premier paramètre.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X