Averiguar id de pantalla

8

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)?

TheWaveLad
fuente
1
screeno DISPLAY?
Oli

Respuestas:

10

Puede usar la variable de entorno $STYpara determinar si está en una sesión de pantalla y también cuál es el nombre de la sesión que está dentro.

Ejemplo

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
$

Matar una sesión

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.
slm
fuente
1

¿Te refieres al screenprograma? screen -lsenumerará 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 -fque busca los argumentos del comando, así como el nombre del comando). Es posible que esté ejecutando más de un script php, por -flo 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= ) 
Drav Sloan
fuente