Pergunta

Existe uma biblioteca C / C ++, e documentação sobre como sistema de coleta e processar informação sobre Solaris?

Embora eu poderia analisar ferramentas de linha de comando, eu prefiro usar uma biblioteca que torna a tarefa mais fácil de fazer.

Graças

Editar: Tem sido sugerido para usar o diretório virtual / proc para coletar informações, porém não é muito melhor do que a análise de ferramentas de linha de comando, no sentido de que eu vou ter de implementar algumas tipo de costume análise para cada pedaço de dados que eu preciso.

Eu estou procurando algo ao longo das linhas de bibliotecas C para Windows ou MacOS que fornece essas informações através de um sistema API c-base, no entanto eu estou tendo nenhuma sorte com o Google.

Foi útil?

Solução

Você pode obter este tipo de informação com kstat API .

man -s 3KSTAT  kstat

Você pode ver como ele é usado em OpenSolaris vmstat e iostat fonte .

Para obter informações sobre processus, eu olhar para ps .

Outras dicas

Solaris tem a / proc diretório virtual, que permite reunir todos os tipos de informações sobre os processos que utilizam sistema de arquivos I / funções S.

Gostaria de usar o / proc virutal dir como CrashWorks sugeriu. Eu fiz isso em ambos aux e linux. Uma coisa a ter em mente é quando eu fiz usar o / proc dir no linux o formato dos arquivos variou de um kernel para outro.

Eu não sei qual é a situação como no lado do Solaris, mas isso pode significar que sua solução não será portátil de um Solaris plataforma para outra.

que sobre getrusage()?

Eu não sou definitivamente um especialista sobre o assunto, mas eu fiz algo muito semelhante para uma atribuição no semestre passado, quando fomos obrigados a tomar instantâneos de processos. Infelizmente, este método requer cavando no kernel que provavelmente não é o que você quer fazer.

Eu encontrei este artigo útil.

De qualquer forma, aqui estão alguns trechos.

 write_lock_irq(&tasklist_lock);
  for_each_process(task) {

    if (system_or_user == 0)
      print_mem_user(task);
    if (system_or_user == 1)
      print_mem_system(task);
  }
  write_unlock_irq(&tasklist_lock);

A idéia que você precisa para bloquear algumas estruturas de dados ou, por vezes, o kernel irá travar. "For_each_process" é um macro definido em algum lugar, mas eu não me lembro de como ele funciona D:

static void print_mem_system(struct task_struct *task)
{
  struct mm_struct *mm;

  if (task -> mm == NULL){ // this is how you distinguish system processes from user processes
    myarraypid[totalnumberofprocesses] = task -> pid; // store process id's into myarraypid[], which you can later copy back to user space for printing/display. Additional information would be found in a "task_struct" which is Linux's implementation of a process. 



  }


}

Alguns dos meus colegas levou diferentes abordagens e mergulhou na fonte do utilitário "ps". Eu acredito que eu estava trabalhando em Linux 2.6.18-92.1.13.e15. Disclaimer: Isso funcionou para mim, mas sua milhagem pode variar. Eu poderia muito bem ser fora da parede e eu não quero levar você para baixo na direção errada.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top