Quero iniciar um programa com SSH usando PHP, o que funciona bem, mas agora quero matar a tela com PHP, mas a única coisa que sei é o nome da tela. Como descubro o ID da tela (automaticamente)?
Quero iniciar um programa com SSH usando PHP, o que funciona bem, mas agora quero matar a tela com PHP, mas a única coisa que sei é o nome da tela. Como descubro o ID da tela (automaticamente)?
Respostas:
Você pode usar a variável de ambiente $STY
para determinar se está em uma sessão de tela e também qual é o nome da sessão em que está.
Inicialmente, estamos sentados em uma janela do terminal, não dentro de uma sessão de tela.
$ echo $STY
$
Gire uma sessão na tela:
$ screen -ls
There is a screen on:
31543.tscrn (Detached)
1 Socket in /var/run/screen/S-saml.
Conecte-se a ele:
$ screen -r 31543.tscrn
Sessão na tela interna:
$ echo $STY
31543.tscrn
$
Com o nome da sessão, você pode matá-lo usando screen
.
$ screen -X -S tscrn kill
Você também pode usar o número lá também.
$ screen -X -S 31543 kill
Confirme se foi morto:
$ screen -ls
No Sockets found in /var/run/screen/S-saml.
Você quer dizer o screen
programa? screen -ls
listará os processos de tela junto com seu nome de tela, precedido pelo PID do qual eles estão executando:
screen -S foo
screen -ls
There are screens on:
8806.foo (09/08/13 20:05:22) (Attached)
Você pode usar isso para matar o processo:
kill -15 $(screen -ls | grep '[0-9]*\.foo' | sed -E 's/\s+([0-9]+)\..*/\1/')
Alternativamente, se você pode identificar o processo php com ps, então o ID do pai será exibido na tela e você poderá matá-lo. pgrep -U <myusername> -f <name>
ajudará a encontrar o processo php que você deseja encontrar (observe o -f
que pesquisa os argumentos do comando e o nome do comando). Você pode estar executando mais de um script php, por isso -f
será um mecanismo melhor para corresponder ao seu processo. <myusername>
seria seu nome de usuário, <name>
seria uma string para corresponder ao processo. Então você pode usar ps -p <pid> -o ppid=
para obter o ID do processo de tela e matá-lo.
kill -15 $( ps -p $(pgrep -U fooman -f foobar_process) -o ppid= )
screen
ouDISPLAY
?