Enviar comando para Processo

1. Enviar comando para Processo

Ricardo Nacimento
ricna

(usa Ubuntu)

Enviado em 08/03/2012 - 20:19h

Olá pessoal.
Estou tendo dificuldades em administrar determinados processos e um um servidor (CentOS) e estou desenvolvendo uma aplicação para gerenciar determinados processos pela WEB (PHP).
Eu precisaria resolver alguns itens que estão sem solução até o momento:

OBS: Todos processos são instâncias de um mesmo programa (run.bin)

1. Apelidar um processo; (no momento todos aparecem como run.bin e não consigo identificar quem é quem)

2. Obter PID do processo através deste apelido (acredito que "apelidando" possa usar o PIDOF;

E finalmente:

3. Enviar comando para este processo que JÁ está rodando.

Exemplo: Processo "top" está rodando com PID 2012, entro no shell e identifico o PID e envio o comando m para ele.

cmdsolucao -p2012 m

Este "cmdsolucao" estaria enviando por parâmetro o comando t para o processo top.

Espero que tenha conseguido explicar e que alguém possa ajudar. Desde já agradeço.
Até mais.


  


2. Re: Enviar comando para Processo

Alexandre Gonçalves Monteiro da Silva
alexandregms

(usa Ubuntu)

Enviado em 08/03/2012 - 23:33h


1. Apelidar um processo; (no momento todos aparecem como run.bin e não consigo identificar quem é quem)


R: Esta não entendi. O que acontece quando vc executa: ps -ef | grep run.bin (poderia postar um trecho?)


2. Obter PID do processo através deste apelido (acredito que "apelidando" possa usar o PIDOF;


R: Você pode capturar os PIDs do processo com o seguinte comando:


ps -ef | grep run.bin | awk '{print $2}'



E finalmente:

3. Enviar comando para este processo que JÁ está rodando.

Exemplo: Processo "top" está rodando com PID 2012, entro no shell e identifico o PID e envio o comando m para ele.

cmdsolucao -p2012 m

Este "cmdsolucao" estaria enviando por parâmetro o comando t para o processo top.


R: Teoricamente, seria isso:


#!/bin/bash
for i in $(ps -ef | grep run.bin | awk '{print $2}')
do

cmdsolucao -p$i m

done




3. Re: Enviar comando para Processo

Ricardo Nacimento
ricna

(usa Ubuntu)

Enviado em 09/03/2012 - 14:32h

alexandregms escreveu:
R: Esta não entendi. O que acontece quando vc executa: ps -ef | grep run.bin (poderia postar um trecho?)

Quero dizer que todas instâncias do processo possuem o mesmo nome, quero mudar este nome para que apareça tanto no TOP como no PS um nome diferente para cada instância. Quero renomear o processo na hora da execução.
Encontrei esse comando:
exec -a ApelidoDoProcesso run.bin  
. Mas não funcionou...

Aqui o resultado de ps -ef | grep run.bin:

root 3165 26230 5 Mar08 pts/3 01:11:23 /home/user/run.bin
root 3232 9344 1 Mar08 pts/5 00:13:47 /home/user/run.bin
root 5641 8106 0 Mar05 pts/1 00:00:59 /home/user/run.bin
root 18235 8145 0 Mar08 pts/2 00:04:02 /home/user/run.bin
root 24252 13916 0 10:37 pts/6 00:00:00 grep run.bin





R: Você pode capturar os PIDs do processo com o seguinte comando:

ps -ef | grep run.bin | awk '{print $2}'



Perfeito! não conhecia esse awk. Certamente vai mudar todo meu código para melhor :)





R: Teoricamente, seria isso:


#!/bin/bash
for i in $(ps -ef | grep run.bin | awk '{print $2}')
do

cmdsolucao -p$i m

done



Este comando "cmdsolucao" é na verdade "comandoDesconhecido". É este comando que quero descobrir (não sei que comando é esse e pode ser que nem exista).
É como se fosse o KILL que manda o sinal para o processo... Mas quero que ele mande um comando como se fosse o usuário que estivesse digitando.
No exemplo seria o TOP.
Então teria no terminal X o TOP rodando.
E no terminal Y eu colocaria "cmdsolucao -p2012 m" sendo que TOP tem PID=2012. Logo no terminal X o top receberia o comando 'm', como se alguém tivesse ido lá e digitado 'm'...

É, eu sei que é pedir demais e que o ideal seria run.bin receber os comandos através de args[], ou socket, mas o programa não foi feito por mim e como sei que o linux concede grandes poderes com comandos "mágicos" :), acredito que este "cmdsolucao" já exista, assim como o KILL.

Obrigado pela ajuda.





4. Re: Enviar comando para Processo

Alexandre Gonçalves Monteiro da Silva
alexandregms

(usa Ubuntu)

Enviado em 09/03/2012 - 17:58h

Cara, eu tb não conheço algum comando ou alguma forma que vc diferencie os processos.
O que diferencia um processo do outro é o PID, outra coisa que tb o ajudaria a diferenciar é o horário e/ou data em que foi iniciado, mas isso creio que não convém ao caso, e nem arrisco em fazer tal coisa.
Os PIDs sempre serão crescentes, então se vc iniciar o primeiro run.bin com o PID 120, saiba que o próximo PID um número maior que este.
Caso vc inicie todos os run.bin de uma vez só, pode até calhar dos PIDs serem seguidos (120, 121, 122, 123), se caso nenhum processo inicie no meio do caminho.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts