void print_pid_stats(struct pageframe *pf, struct process *process_list)
{
struct process *ps;
- struct maps *map;
long int swapped, present;
+ long int biggest = 0, second_biggest;
+ int count;
+
+ list_for_each_entry(ps, &process_list->list, list)
+ biggest = MAX(biggest, ps->pages_present);
printf(" in ram swapped pid name\n");
+restart:
+ second_biggest = 0;
+ count = 0;
list_for_each_entry(ps, &process_list->list, list) {
- swapped = present = 0;
- if (ps->maps)
- list_for_each_entry(map, &ps->maps->list, list) {
- present += map->pages_present;
- swapped += map->pages_swapped;
- }
+ present = ps->pages_present;
+ swapped = ps->pages_swapped;
+
+ second_biggest = ps->pages_present < biggest &&
+ second_biggest < ps->pages_present ?
+ ps->pages_present : second_biggest;
+
+ if (ps->pages_present != biggest)
+ continue;
if ((swapped + present) == 0)
continue;
PAGE_TO_NICE(present), PAGE_TO_NICE_UNIT(present),
PAGE_TO_NICE(swapped), PAGE_TO_NICE_UNIT(swapped),
ps->pid, ps->name);
+ count++;
+ }
+
+ if (count > 0) {
+ biggest = second_biggest;
+ goto restart;
}
}