Como eu pego a quantidade de processos ???

1. Como eu pego a quantidade de processos ???

Ricardo
ricardo13

(usa Fedora)

Enviado em 03/06/2009 - 16:55h

olá pessoal,

Estou desenvolvendo um programa em C que manda informações (como o arquivo /proc/loadavg do Linux) por socket para outra máquina. Eu estou querendo mandar informações sobre a quantidade total de processos e a quantidade de processos que estão rodando. Qual é o arquivo no Linux que disponibiliza essa informação ???

Muito Obrigado

Ricardo


  


2. segue comado

Perfil removido
removido

(usa Nenhuma)

Enviado em 19/08/2017 - 16:56h

Para o nosso exemplo, vamos digitar o seguinte: ps ax | wc -l.
Este número representa a quantidade de processos em execução no seu sistema.


3. Re: Como eu pego a quantidade de processos ???

Fernando
phoemur

(usa Debian)

Enviado em 19/08/2017 - 21:13h

Basicamente os processos rodando você vê em /proc com os diretórios que são o número do processo.
Como você está usando C++, fiz aqui rapidamente utilizando boost/filesystem.hpp
Basicamente você desconsidera os diretórios cujo nome não contém apenas números.

teste.cpp

#include <iostream>
#include <string>
#include <boost/filesystem.hpp>
using namespace std;
using namespace boost::filesystem;

bool has_only_digits(const string & s){
return s.find_first_not_of( "0123456789" ) == string::npos;
}

int main()
{
int procs = 0;
path p("/proc");
for (auto i=directory_iterator(p); i != directory_iterator(); i++) {
if (is_directory(i->path())) {
string s = i->path().filename().string();
if (has_only_digits(s)) {
procs++;
}
}
}

cout << procs << endl;

return 0;
}


compila com:

g++ -o teste teste.cpp -lboost_filesystem -lboost_system


Agora a saída vai ser sempre 2 ou 3 processos a menos que você obtem com o ps aux | wc -l pois acredito que se deve ao processo init e ao processo atual. Veja aqui:


[phoemur@notebook_lenovo ~/cpp/teste]$ps aux | wc -l
199
[phoemur@notebook_lenovo ~/cpp/teste]$./teste
197



4. Re: Como eu pego a quantidade de processos ???

Fernando
phoemur

(usa Debian)

Enviado em 19/08/2017 - 21:44h

pá de ouro


5. Re: Como eu pego a quantidade de processos ???

Paulo
paulo1205

(usa Ubuntu)

Enviado em 19/08/2017 - 21:47h

Como a Boost não é padrão (parece que o novo padrão, a ser homologado este ano, adotará a parte de filesystem da Boost), pode ser interessante também tentar fazer sem ela.

A versão abaixo funciona em qualquer sistema compatível com POSIX, e pode facilmente ser adaptada para C (ela é em C, na verdade, exceto pelas exibições de mensagens).

#include <iostream>
#include <cerrno>
#include <cstring>
#include <dirent.h>

using namespace std;

int main(){
DIR *dir;
struct dirent *p_entry;
if(!(dir=opendir("/proc"))){
cerr << "Erro ao abrir /proc: " << strerror(errno); << '\n';
return 1;
}
unsigned n_procs=0;
size_t len;
while((p_entry=readdir(dir))){
if((len=strspn(p_entry->d_name, "0123456789")>0 && p_entry->d_name[len]=='\0')
n_procs++;
}
closedir(dir);
cout << "Há " << n_procs << " processos ativos. \n";
}



6. Re: Como eu pego a quantidade de processos ???

Paulo
paulo1205

(usa Ubuntu)

Enviado em 19/08/2017 - 21:50h

phoemur escreveu:

pá de ouro


Caramba... É mesmo! Nem tinha reparado.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts