, 그이 힘든 것 같다 :)얻기 CPU 정보는
좋은 것입니다. 프로세스 ID에서 시작, 내가 잡을 수 있어야합니다 :
- 얼마나 많은 CPU 프로세스 %를 차지
- 이 프로세스가 CPU를
이 요구를 사용했습니다 얼마나 Cocoa/Objective-C 또는 C로 작성해야합니다. 또한 Snow Leopard를 통해 Tiger에서 작업해야합니다.
감사합니다.
, 그이 힘든 것 같다 :)얻기 CPU 정보는
좋은 것입니다. 프로세스 ID에서 시작, 내가 잡을 수 있어야합니다 :
이 요구를 사용했습니다 얼마나 Cocoa/Objective-C 또는 C로 작성해야합니다. 또한 Snow Leopard를 통해 Tiger에서 작업해야합니다.
감사합니다.
진부한 방법은 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;
}
이것은 약간 느린 것으로 보입니다. 나는 매초 컴퓨터에있는 모든 프로세스에 대해 이것을 실행할 것이고 이것은 충분히 효율적이지 않을 수 있습니다. 나는 당신에게 노력에 대한 투표를했습니다. 적어도 당신은 나에게 뭔가를주었습니다 :) –
@ Eric 모든 프로세스에 대한 데이터를 얻고 싶다면 쉽게 최적화 할 수 있습니다. 'ps' 명령이 모두 출력하고 동시에 모두 구문 분석하도록하십시오. 이것은 매 초 하나의'popen' 호출 일 것입니다. – epatel
현재 포커스 앱을 위의 방법으로 매초마다 위의 메서드를 호출하지만 반환 값이없는 경우가 종종 있습니다. 이게 말이 돼? 최소 하나의 프로세스에서 코드가 어떻게 실행되도록 최적화 할 수 있습니까? 정말 고마워. Btw 훌륭한 포트폴리오! –
당신은 "제발"작성 잊어 버렸습니다. – Eimantas
또한 제 편집 (첫 번째 줄)을 기록해 두십시오. –