Função para trabalhar com processos do sistema [RESOLVIDO]

1. Função para trabalhar com processos do sistema [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 21/05/2016 - 06:20h

Bom dia pessoal;
passei a madruga estudando e praticando até que chegou em uma parte que preciso dar kill em alguns processos do sistema, existe alguma função para isso?
Nas minhas pesquisas eu achei essas duas funções:
getpid() (retorna pid do processo em questão)
getppid() (retorna pid do processo pai)
porém não é disso que eu preciso, eu preciso retornar/armazenar o pid de um processo específico.

Uma das soluções que eu pensei foi a seguinte:
#include <stdio.h>
#include <stdlib.h>
int main(void){
FILE *wpa;
FILE *dhcpcd;
int wpapid;
int dhcpcdpid;

system("ps -ax |grep wpa_supplicant |cut -d? -f-1 >/var/tmp/wpa;ps -ax |grep dhcpcd |cut -d? -f-1 >/var/tmp/dhcpcd");
if((wpa=fopen("/var/tmp/wpa","r"))==NULL)
{
exit(1);
}
else
{
fscanf(wpa,"%5d",&wpapid);
printf("wpa: %d\n",wpapid);
}
if((dhcpcd=fopen("/var/tmp/dhcpcd","r"))==NULL)
{
exit(1);
}
else
{
fscanf(dhcpcd,"%5d",&dhcpcdpid);
printf("dhcpcd: %d\n",dhcpcdpid);
}
return 0;
}

Output:
BSD4LIFE$ ./pid1
wpa: 126
dhcpcd: 149

O output saiu correto, como o esperado. Porém não é uma solução muito portável usar a função system() para o que eu quero, tendo em mente que os outputs dos comandos podem variar de um sistema para o outro e a minha ideia é manter meu código principal o mais portável possível.
Alguma sugestão? obrigado desde já.


  


2. Re: Função para trabalhar com processos do sistema

Paulo
paulo1205

(usa Ubuntu)

Enviado em 22/05/2016 - 19:55h

Muitos serviços guardam PIDs de seus respectivos processos como texto puro em arquivos dentro de /var/run. Se esse for o caso dos programas que você quer manipular, você só tem de abrir os respectivos arquivos e ler com fscanf() o PID de cada um.

O problema é que mesmo esse comportamento não é garantido: alguns programas podem não implementar tal funcionalidade, outros permitem desabilitar, e a maioria permite que você mude o caminho do arquivo de PID por meio de opções na linha de comando ou diretivas no arquivo de configuração.

Ser absolutamente universal é difícil. Diferentes sistemas podem ter diferentes opções do comando ps, de modo que até sua solução atual poderia falhar em outra máquina ou outro sistema.

Outra abordagem que talvez seja mais barata (computacionalmente falando), por não depender de processos externos, é você varrer todos os PIDs dentro de /proc, mais especificamente nos arquivos /proc/<PID>/cmdline, e ver se a linha de comando (em texto puro) corresponde a um dos processos que você quer. Infelizmente, porém, o conteúdo de /proc também varia entre diferentes sistemas (e.g. Linux, BSDs, Solaris etc.), de modo que essa alternativa também não será universal.


3. Re: Função para trabalhar com processos do sistema [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 24/05/2016 - 17:04h

Acho que vou trabalhar com a pasta proc quando eu quiser tratar de processos, pra não ficar sempre dependendo de processos externos.
Valeu pelas sugestões. :)

--
Just bring us some beers, and then we can talk about our systems. :)







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts