2010-08-17 5 views
4

, 그이 힘든 것 같다 :)얻기 CPU 정보는

좋은 것입니다. 프로세스 ID에서 시작, 내가 잡을 수 있어야합니다 :

  1. 얼마나 많은 CPU 프로세스 %를 차지
  2. 이 프로세스가 CPU를

이 요구를 사용했습니다 얼마나 Cocoa/Objective-C 또는 C로 작성해야합니다. 또한 Snow Leopard를 통해 Tiger에서 작업해야합니다.

감사합니다.

+2

당신은 "제발"작성 잊어 버렸습니다. – Eimantas

+0

또한 제 편집 (첫 번째 줄)을 기록해 두십시오. –

답변

1

진부한 방법은 popen 명령을 생성하고 ps의 일부 출력을 가져 오는 것입니다. 이 같은

즉 :

#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 

void get_process_info(int pid) { 
    char ps_cmd[256]; 
    sprintf(ps_cmd, "ps -O %%cpu -p %d", pid); // see man page for ps 
    FILE *fp = popen(ps_cmd, "r"); 
    if (fp) { 
    char line[4096]; 
    while (line == fgets(line, 4096, fp)) { 
     if (atoi(line) == pid) { 
     char dummy[256]; 
     char cpu[256]; 
     char time[256]; 

     // PID %CPU TT STAT  TIME COMMAND 
     // 32324 0,0 s001 S+  0:00.00 bc 

     sscanf(line, "%s %s %s %s %s", dummy, cpu, dummy, dummy, time); 
     printf("%s %s\n", cpu, time); // you will need to parse these strings 

     pclose(fp); 
     return; 
     } 
    } 
    pclose(fp); 
    } 
} 

int main() { 
    get_process_info(32324); 
    return 0; 
} 
+0

이것은 약간 느린 것으로 보입니다. 나는 매초 컴퓨터에있는 모든 프로세스에 대해 이것을 실행할 것이고 이것은 충분히 효율적이지 않을 수 있습니다. 나는 당신에게 노력에 대한 투표를했습니다. 적어도 당신은 나에게 뭔가를주었습니다 :) –

+1

@ Eric 모든 프로세스에 대한 데이터를 얻고 싶다면 쉽게 최적화 할 수 있습니다. 'ps' 명령이 모두 출력하고 동시에 모두 구문 분석하도록하십시오. 이것은 매 초 하나의'popen' 호출 일 것입니다. – epatel

+0

현재 포커스 앱을 위의 방법으로 매초마다 위의 메서드를 호출하지만 반환 값이없는 경우가 종종 있습니다. 이게 말이 돼? 최소 하나의 프로세스에서 코드가 어떻게 실행되도록 최적화 할 수 있습니까? 정말 고마워. Btw 훌륭한 포트폴리오! –