J'ai récemment dû le faire. Sur Stack Overflow, j'ai répondu comment trouver le PID du processus en cours d'exécution à l'écran . Une fois que vous avez le PID, vous pouvez utiliser ps
pour obtenir la commande. Voici le contenu de cette réponse avec un contenu supplémentaire pour répondre à votre situation:
Vous pouvez obtenir le PID des sessions d'écran ici comme ceci:
$ screen -ls
There are screens on:
1934.foo_Server (01/25/15 15:26:01) (Detached)
1876.foo_Webserver (01/25/15 15:25:37) (Detached)
1814.foo_Monitor (01/25/15 15:25:13) (Detached)
3 Sockets in /var/run/screen/S-ubuntu.
Supposons que vous souhaitiez que le PID du programme s'exécute dans Bash dans la foo_Monitor
session écran. Utilisez le PID de la foo_Monitor
session écran pour obtenir le PID de la bash
session en cours d'exécution en recherchant les PID (PID parent) pour le PID connu:
$ ps -el | grep 1814 | grep bash
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 S 1000 1815 1814 0 80 0 - 5520 wait pts/1 00:00:00 bash
Maintenant, obtenez juste le PID de la bash
session:
$ ps -el | grep 1814 | grep bash | awk '{print $4}'
1815
Maintenant, nous voulons le processus avec ce PID. Il suffit d'imbriquer les commandes, et cette fois, utilisez l' -v
indicateur grep bash
pour obtenir le processus qui n'est pas bash:
$ echo $(ps -el | grep $(ps -el | grep 1814 | grep bash | awk '{print $4}') | grep -v bash | awk '{print $4}')
23869
Nous pouvons utiliser ce PID pour trouver la commande (Regardez à la fin de la deuxième ligne):
$ ps u -p 23869
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
dotanco+ 18345 12.1 20.1 5258484 3307860 ? Sl Feb02 1147:09 /usr/lib/foo
Mets le tout ensemble:
$ ps u -p $(ps -el | grep $(ps -el | grep SCREEN_SESSION_PID | grep bash | awk '{print $4}') | grep -v bash | awk '{print $4}')
Que diriez-vous d'utiliser
screen -S <your-fancy-name>
pour donner aux sessions d'écran des noms significatifs en fonction des commandes qu'elles exécutent? Les noms seront répertoriés avecscreen -ls
et seront utilisés pour reprendre une session parscreen -r <your-fancy-name>
.Modifier pour ajouter:
Puisqu'il a été porté à mon attention l'autre jour.
tmux
offre à peuscreen
près le même ensemble de fonctionnalités (sinon plus) et est livré avec une fonctionnalité adaptée à vos besoins. De la FAQ: "tmux prend en charge le renommage automatique des fenêtres en application en cours sans hacks grossiers en utilisant des séquences d'échappement. C'est même activé par défaut."la source