Descobrir o id da tela

7

Eu quero iniciar um programa com SSH usando PHP, o que funciona bem, mas agora eu quero matar a tela com PHP, mas a única coisa que sei é o nome da tela. Como faço para descobrir a ID da tela (automaticamente)?

    
por TheWaveLad 09.08.2013 / 19:53

2 respostas

8

Você pode usar a variável de ambiente $STY para determinar se você está em uma sessão de tela e também qual é o nome da sessão em que você está.

Exemplo

Inicialmente, estamos sentados em uma janela de terminal, não dentro de uma sessão de tela.

$ echo $STY

$

Agite uma sessão de 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 de tela interna:

$ echo $STY
31543.tscrn
$

Matando uma sessão

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 que ele foi cancelado:

$ screen -ls
No Sockets found in /var/run/screen/S-saml.
    
por 09.08.2013 / 21:20
1

Você quer dizer o programa screen ? screen -ls listará os processos de tela junto com seu nome de tela, precedido pelo PID do qual eles estão sendo executados:

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]+)\..*//')

Alternativamente, se você puder identificar o processo do php com o ps, então o seu pai id será a tela e você pode matar isso. pgrep -U <myusername> -f <name> ajudará a encontrar o processo do php que você deseja encontrar (observe o -f que procura os argumentos do comando, bem como o nome do comando). Você pode estar executando mais de um script php, portanto -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 matar isso.

kill -15 $( ps -p $(pgrep -U fooman -f foobar_process) -o ppid= ) 
    
por 09.08.2013 / 20:47