Trouver l'identifiant de l'écran

8

Je veux démarrer un programme avec SSH en utilisant PHP, ce qui fonctionne bien, mais maintenant je veux tuer l'écran avec PHP, mais la seule chose que je sais, c'est le nom de l'écran. Comment trouver (automatiquement) l'ID d'écran?

TheWaveLad
la source
1
screenou DISPLAY?
Oli

Réponses:

10

Vous pouvez utiliser la variable d'environnement $STYpour déterminer si vous êtes dans une session écran et aussi quel est le nom de la session que vous êtes à l'intérieur.

Exemple

Au départ, nous sommes assis dans une fenêtre de terminal, pas à l'intérieur d'une session d'écran.

$ echo $STY

$

Faites tourner une session d'écran:

$ screen -ls
There is a screen on:
    31543.tscrn (Detached)
1 Socket in /var/run/screen/S-saml.

Connectez-vous:

$ screen -r 31543.tscrn

Session écran intérieur:

$ echo $STY
31543.tscrn
$

Tuer une session

Avec le nom de la session, vous pouvez la tuer en utilisant screen.

$ screen -X -S tscrn kill

Vous pouvez également y utiliser le numéro.

$ screen -X -S 31543 kill

Confirmez qu'il a été tué:

$ screen -ls
No Sockets found in /var/run/screen/S-saml.
slm
la source
1

Voulez-vous dire le screenprogramme? screen -lsrépertorie les processus d'écran avec leur nom d'écran, précédé du PID à partir duquel ils s'exécutent:

screen -S foo
screen -ls

There are screens on:
    8806.foo        (09/08/13 20:05:22)     (Attached)

Vous pouvez l'utiliser pour tuer le processus:

kill -15 $(screen -ls | grep '[0-9]*\.foo' | sed -E 's/\s+([0-9]+)\..*/\1/')

Alternativement, si vous pouvez identifier le processus php avec ps, son identifiant parent sera écran et vous pouvez le tuer. pgrep -U <myusername> -f <name>aidera à trouver le processus php que vous voulez trouver (notez celui -fqui recherche les arguments de la commande ainsi que le nom de la commande). Vous exécutez peut-être plusieurs scripts php, ce -fsera donc un meilleur mécanisme pour correspondre à votre processus. <myusername>serait votre nom d'utilisateur, <name>serait une chaîne pour correspondre au processus. Ensuite, vous pouvez utiliser ps -p <pid> -o ppid=pour obtenir l'ID de processus d'écran et tuer cela.

kill -15 $( ps -p $(pgrep -U fooman -f foobar_process) -o ppid= ) 
Drav Sloan
la source