나는 확실히이 주제에 대한 전문가는 아니지만, 지난 학기에 우리가 프로세스의 스냅 샷을 찍어야 할 과제와 매우 비슷한 것을했습니다. 불행히도이 방법을 사용하려면 커널에 파고 들어야합니다.
나는 이걸 찾았습니다. article이 도움이되었습니다.
어쨌든 여기에 일부 발췌 문장이 있습니다.
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);
데이터 구조를 잠그거나 커널을 잠그는 것이 좋습니다. "for_each_process는"어딘가에 정의 된 매크로입니다하지만 난 그게 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.
}
}
반 친구들 중 일부
는 다른 접근을했다하고 "PS"유틸리티의 소스로 다이빙을. 나는 리눅스 2.6.18-92.1.13.e15에서 일하고 있었다고 생각한다. 면책 조항 : 이것은 나를 위해 일했지만 귀하의 마일리지는 다를 수 있습니다. 나는 벽에서 떨어져있을 수 있으며 잘못된 방향으로 인도하려고하지 않습니다.
무엇이 필요합니까? 피디? 메모리/CPU 사용량? 디스크 공간? – user44511
가능한 한 많이 :) –