Quiero iniciar un programa con SSH usando PHP, que funciona bien, pero ahora quiero matar la pantalla con PHP, pero lo único que sé es el nombre de la pantalla. ¿Cómo encuentro la ID de la pantalla (automáticamente)?
Quiero iniciar un programa con SSH usando PHP, que funciona bien, pero ahora quiero matar la pantalla con PHP, pero lo único que sé es el nombre de la pantalla. ¿Cómo encuentro la ID de la pantalla (automáticamente)?
Respuestas:
Puede usar la variable de entorno $STY
para determinar si está en una sesión de pantalla y también cuál es el nombre de la sesión que está dentro.
Inicialmente estamos sentados en una ventana de terminal, no dentro de una sesión de pantalla.
$ echo $STY
$
Gira una sesión de pantalla:
$ screen -ls
There is a screen on:
31543.tscrn (Detached)
1 Socket in /var/run/screen/S-saml.
Conéctate a él:
$ screen -r 31543.tscrn
Sesión de pantalla interior:
$ echo $STY
31543.tscrn
$
Con el nombre de la sesión puedes matarlo usando screen
.
$ screen -X -S tscrn kill
También puede usar el número allí también.
$ screen -X -S 31543 kill
Confirme que ha sido asesinado:
$ screen -ls
No Sockets found in /var/run/screen/S-saml.
¿Te refieres al screen
programa? screen -ls
enumerará los procesos de pantalla junto con su nombre de pantalla, precedido por el PID desde el que se ejecutan:
screen -S foo
screen -ls
There are screens on:
8806.foo (09/08/13 20:05:22) (Attached)
Puedes usar eso para matar el proceso:
kill -15 $(screen -ls | grep '[0-9]*\.foo' | sed -E 's/\s+([0-9]+)\..*/\1/')
Alternativamente, si puede identificar el proceso php con ps, entonces su identificación principal se mostrará en la pantalla y puede eliminar eso. pgrep -U <myusername> -f <name>
ayudará a encontrar el proceso de php que desea encontrar (tenga en cuenta el -f
que busca los argumentos del comando, así como el nombre del comando). Es posible que esté ejecutando más de un script php, por -f
lo que será un mejor mecanismo para que coincida con su proceso. <myusername>
sería su nombre de usuario, <name>
sería una cadena para que coincida con el proceso. Luego puede usar ps -p <pid> -o ppid=
para obtener la identificación del proceso de pantalla y eliminar eso.
kill -15 $( ps -p $(pgrep -U fooman -f foobar_process) -o ppid= )
screen
oDISPLAY
?