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?
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?
Réponses:
Vous pouvez utiliser la variable d'environnement $STY
pour déterminer si vous êtes dans une session écran et aussi quel est le nom de la session que vous êtes à l'intérieur.
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
$
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.
Voulez-vous dire le screen
programme? screen -ls
ré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 -f
qui recherche les arguments de la commande ainsi que le nom de la commande). Vous exécutez peut-être plusieurs scripts php, ce -f
sera 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= )
screen
ouDISPLAY
?