ps.c revision 8b37c91b934bf22d8ae52bebad7f1f22f16d1132
1dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include <stdio.h> 2dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include <stdlib.h> 3dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include <ctype.h> 4dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include <fcntl.h> 5dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 6dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include <string.h> 7dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 8dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include <sys/stat.h> 9dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include <sys/types.h> 10dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include <dirent.h> 11dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 12dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include <pwd.h> 13dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 14392744175c4de67dc98e72da6745e6351118c985San Mehat#include <cutils/sched_policy.h> 15392744175c4de67dc98e72da6745e6351118c985San Mehat 16dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 17dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstatic char *nexttoksep(char **strp, char *sep) 18dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 19dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project char *p = strsep(strp,sep); 20dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return (p == 0) ? "" : p; 21dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 22dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstatic char *nexttok(char **strp) 23dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 24dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return nexttoksep(strp, " "); 25dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 26dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 27dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define SHOW_PRIO 1 28dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define SHOW_TIME 2 29392744175c4de67dc98e72da6745e6351118c985San Mehat#define SHOW_POLICY 4 308b37c91b934bf22d8ae52bebad7f1f22f16d1132Dmitry Shmidt#define SHOW_CPU 8 31dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 32dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstatic int display_flags = 0; 33dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 34dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstatic int ps_line(int pid, int tid, char *namefilter) 35dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 36dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project char statline[1024]; 37dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project char cmdline[1024]; 38dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project char user[32]; 39dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project struct stat stats; 40dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project int fd, r; 41dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project char *ptr, *name, *state; 42dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project int ppid, tty; 43dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project unsigned wchan, rss, vss, eip; 44dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project unsigned utime, stime; 458b37c91b934bf22d8ae52bebad7f1f22f16d1132Dmitry Shmidt int prio, nice, rtprio, sched, psr; 46dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project struct passwd *pw; 47dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 48dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project sprintf(statline, "/proc/%d", pid); 49dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project stat(statline, &stats); 50dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 51dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project if(tid) { 52dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project sprintf(statline, "/proc/%d/task/%d/stat", pid, tid); 53dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project cmdline[0] = 0; 54dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project } else { 55dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project sprintf(statline, "/proc/%d/stat", pid); 56dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project sprintf(cmdline, "/proc/%d/cmdline", pid); 57dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project fd = open(cmdline, O_RDONLY); 58dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project if(fd == 0) { 59dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project r = 0; 60dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project } else { 61dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project r = read(fd, cmdline, 1023); 62dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project close(fd); 63dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project if(r < 0) r = 0; 64dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project } 65dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project cmdline[r] = 0; 66dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project } 67dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 68dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project fd = open(statline, O_RDONLY); 69dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project if(fd == 0) return -1; 70dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project r = read(fd, statline, 1023); 71dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project close(fd); 72dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project if(r < 0) return -1; 73dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project statline[r] = 0; 74dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 75dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project ptr = statline; 76dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project nexttok(&ptr); // skip pid 77dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project ptr++; // skip "(" 78dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 79dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project name = ptr; 80dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project ptr = strrchr(ptr, ')'); // Skip to *last* occurence of ')', 81dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project *ptr++ = '\0'; // and null-terminate name. 82dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 83dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project ptr++; // skip " " 84dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project state = nexttok(&ptr); 85dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project ppid = atoi(nexttok(&ptr)); 86dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project nexttok(&ptr); // pgrp 87dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project nexttok(&ptr); // sid 88dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project tty = atoi(nexttok(&ptr)); 89dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 90dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project nexttok(&ptr); // tpgid 91dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project nexttok(&ptr); // flags 92dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project nexttok(&ptr); // minflt 93dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project nexttok(&ptr); // cminflt 94dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project nexttok(&ptr); // majflt 95dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project nexttok(&ptr); // cmajflt 96dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#if 1 97dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project utime = atoi(nexttok(&ptr)); 98dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project stime = atoi(nexttok(&ptr)); 99dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#else 100dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project nexttok(&ptr); // utime 101dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project nexttok(&ptr); // stime 102dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#endif 103dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project nexttok(&ptr); // cutime 104dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project nexttok(&ptr); // cstime 105dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project prio = atoi(nexttok(&ptr)); 106dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project nice = atoi(nexttok(&ptr)); 107dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project nexttok(&ptr); // threads 108dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project nexttok(&ptr); // itrealvalue 109dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project nexttok(&ptr); // starttime 110dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project vss = strtoul(nexttok(&ptr), 0, 10); // vsize 111dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project rss = strtoul(nexttok(&ptr), 0, 10); // rss 112dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project nexttok(&ptr); // rlim 113dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project nexttok(&ptr); // startcode 114dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project nexttok(&ptr); // endcode 115dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project nexttok(&ptr); // startstack 116dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project nexttok(&ptr); // kstkesp 117dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project eip = strtoul(nexttok(&ptr), 0, 10); // kstkeip 118dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project nexttok(&ptr); // signal 119dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project nexttok(&ptr); // blocked 120dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project nexttok(&ptr); // sigignore 121dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project nexttok(&ptr); // sigcatch 122dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project wchan = strtoul(nexttok(&ptr), 0, 10); // wchan 123dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project nexttok(&ptr); // nswap 124dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project nexttok(&ptr); // cnswap 125dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project nexttok(&ptr); // exit signal 1268b37c91b934bf22d8ae52bebad7f1f22f16d1132Dmitry Shmidt psr = atoi(nexttok(&ptr)); // processor 127dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project rtprio = atoi(nexttok(&ptr)); // rt_priority 128dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project sched = atoi(nexttok(&ptr)); // scheduling policy 129dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 130dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project tty = atoi(nexttok(&ptr)); 131dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 132dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project if(tid != 0) { 133dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project ppid = pid; 134dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project pid = tid; 135dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project } 136dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 137dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project pw = getpwuid(stats.st_uid); 138dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project if(pw == 0) { 139dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project sprintf(user,"%d",(int)stats.st_uid); 140dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project } else { 141dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project strcpy(user,pw->pw_name); 142dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project } 143dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 144dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project if(!namefilter || !strncmp(name, namefilter, strlen(namefilter))) { 145392744175c4de67dc98e72da6745e6351118c985San Mehat printf("%-9s %-5d %-5d %-6d %-5d", user, pid, ppid, vss / 1024, rss * 4); 1468b37c91b934bf22d8ae52bebad7f1f22f16d1132Dmitry Shmidt if (display_flags & SHOW_CPU) 1478b37c91b934bf22d8ae52bebad7f1f22f16d1132Dmitry Shmidt printf(" %-2d", psr); 1488b37c91b934bf22d8ae52bebad7f1f22f16d1132Dmitry Shmidt if (display_flags & SHOW_PRIO) 149dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project printf(" %-5d %-5d %-5d %-5d", prio, nice, rtprio, sched); 150392744175c4de67dc98e72da6745e6351118c985San Mehat if (display_flags & SHOW_POLICY) { 151392744175c4de67dc98e72da6745e6351118c985San Mehat SchedPolicy p; 152392744175c4de67dc98e72da6745e6351118c985San Mehat if (get_sched_policy(pid, &p) < 0) 153392744175c4de67dc98e72da6745e6351118c985San Mehat printf(" un "); 154392744175c4de67dc98e72da6745e6351118c985San Mehat else { 155392744175c4de67dc98e72da6745e6351118c985San Mehat if (p == SP_BACKGROUND) 156392744175c4de67dc98e72da6745e6351118c985San Mehat printf(" bg "); 157392744175c4de67dc98e72da6745e6351118c985San Mehat else if (p == SP_FOREGROUND) 158392744175c4de67dc98e72da6745e6351118c985San Mehat printf(" fg "); 159392744175c4de67dc98e72da6745e6351118c985San Mehat else 160392744175c4de67dc98e72da6745e6351118c985San Mehat printf(" er "); 161392744175c4de67dc98e72da6745e6351118c985San Mehat } 162392744175c4de67dc98e72da6745e6351118c985San Mehat } 163dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project printf(" %08x %08x %s %s", wchan, eip, state, cmdline[0] ? cmdline : name); 164dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project if(display_flags&SHOW_TIME) 165dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project printf(" (u:%d, s:%d)", utime, stime); 166392744175c4de67dc98e72da6745e6351118c985San Mehat 167dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project printf("\n"); 168dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project } 169dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return 0; 170dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 171dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 172dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 173dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectvoid ps_threads(int pid, char *namefilter) 174dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 175dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project char tmp[128]; 176dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project DIR *d; 177dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project struct dirent *de; 178dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 179dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project sprintf(tmp,"/proc/%d/task",pid); 180dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project d = opendir(tmp); 181dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project if(d == 0) return; 182dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 183dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project while((de = readdir(d)) != 0){ 184dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project if(isdigit(de->d_name[0])){ 185dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project int tid = atoi(de->d_name); 186dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project if(tid == pid) continue; 187dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project ps_line(pid, tid, namefilter); 188dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project } 189dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project } 190dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project closedir(d); 191dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 192dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 193dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectint ps_main(int argc, char **argv) 194dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 195dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project DIR *d; 196dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project struct dirent *de; 197dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project char *namefilter = 0; 198dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project int pidfilter = 0; 199dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project int threads = 0; 200dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 201dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project d = opendir("/proc"); 202dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project if(d == 0) return -1; 203dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 204dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project while(argc > 1){ 205dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project if(!strcmp(argv[1],"-t")) { 206dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project threads = 1; 207dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project } else if(!strcmp(argv[1],"-x")) { 208dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project display_flags |= SHOW_TIME; 209392744175c4de67dc98e72da6745e6351118c985San Mehat } else if(!strcmp(argv[1],"-P")) { 210392744175c4de67dc98e72da6745e6351118c985San Mehat display_flags |= SHOW_POLICY; 211dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project } else if(!strcmp(argv[1],"-p")) { 212dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project display_flags |= SHOW_PRIO; 2138b37c91b934bf22d8ae52bebad7f1f22f16d1132Dmitry Shmidt } else if(!strcmp(argv[1],"-c")) { 2148b37c91b934bf22d8ae52bebad7f1f22f16d1132Dmitry Shmidt display_flags |= SHOW_CPU; 215dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project } else if(isdigit(argv[1][0])){ 216dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project pidfilter = atoi(argv[1]); 217dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project } else { 218dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project namefilter = argv[1]; 219dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project } 220dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project argc--; 221dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project argv++; 222dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project } 223dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 2248b37c91b934bf22d8ae52bebad7f1f22f16d1132Dmitry Shmidt printf("USER PID PPID VSIZE RSS %s%s %s WCHAN PC NAME\n", 2258b37c91b934bf22d8ae52bebad7f1f22f16d1132Dmitry Shmidt (display_flags&SHOW_CPU)?"CPU ":"", 226392744175c4de67dc98e72da6745e6351118c985San Mehat (display_flags&SHOW_PRIO)?"PRIO NICE RTPRI SCHED ":"", 227392744175c4de67dc98e72da6745e6351118c985San Mehat (display_flags&SHOW_POLICY)?"PCY " : ""); 228dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project while((de = readdir(d)) != 0){ 229dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project if(isdigit(de->d_name[0])){ 230dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project int pid = atoi(de->d_name); 231dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project if(!pidfilter || (pidfilter == pid)) { 232dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project ps_line(pid, 0, namefilter); 233dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project if(threads) ps_threads(pid, namefilter); 234dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project } 235dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project } 236dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project } 237dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project closedir(d); 238dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return 0; 239dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 240dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 241