ps.c revision 392744175c4de67dc98e72da6745e6351118c985
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 30dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 31dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstatic int display_flags = 0; 32dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 33dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectstatic int ps_line(int pid, int tid, char *namefilter) 34dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 35dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project char statline[1024]; 36dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project char cmdline[1024]; 37dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project char user[32]; 38dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project struct stat stats; 39dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project int fd, r; 40dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project char *ptr, *name, *state; 41dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project int ppid, tty; 42dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project unsigned wchan, rss, vss, eip; 43dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project unsigned utime, stime; 44dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project int prio, nice, rtprio, sched; 45dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project struct passwd *pw; 46dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 47dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project sprintf(statline, "/proc/%d", pid); 48dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project stat(statline, &stats); 49dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 50dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project if(tid) { 51dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project sprintf(statline, "/proc/%d/task/%d/stat", pid, tid); 52dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project cmdline[0] = 0; 53dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project } else { 54dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project sprintf(statline, "/proc/%d/stat", pid); 55dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project sprintf(cmdline, "/proc/%d/cmdline", pid); 56dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project fd = open(cmdline, O_RDONLY); 57dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project if(fd == 0) { 58dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project r = 0; 59dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project } else { 60dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project r = read(fd, cmdline, 1023); 61dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project close(fd); 62dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project if(r < 0) r = 0; 63dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project } 64dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project cmdline[r] = 0; 65dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project } 66dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 67dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project fd = open(statline, O_RDONLY); 68dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project if(fd == 0) return -1; 69dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project r = read(fd, statline, 1023); 70dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project close(fd); 71dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project if(r < 0) return -1; 72dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project statline[r] = 0; 73dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 74dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project ptr = statline; 75dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project nexttok(&ptr); // skip pid 76dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project ptr++; // skip "(" 77dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 78dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project name = ptr; 79dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project ptr = strrchr(ptr, ')'); // Skip to *last* occurence of ')', 80dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project *ptr++ = '\0'; // and null-terminate name. 81dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 82dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project ptr++; // skip " " 83dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project state = nexttok(&ptr); 84dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project ppid = atoi(nexttok(&ptr)); 85dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project nexttok(&ptr); // pgrp 86dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project nexttok(&ptr); // sid 87dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project tty = atoi(nexttok(&ptr)); 88dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 89dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project nexttok(&ptr); // tpgid 90dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project nexttok(&ptr); // flags 91dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project nexttok(&ptr); // minflt 92dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project nexttok(&ptr); // cminflt 93dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project nexttok(&ptr); // majflt 94dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project nexttok(&ptr); // cmajflt 95dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#if 1 96dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project utime = atoi(nexttok(&ptr)); 97dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project stime = atoi(nexttok(&ptr)); 98dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#else 99dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project nexttok(&ptr); // utime 100dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project nexttok(&ptr); // stime 101dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#endif 102dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project nexttok(&ptr); // cutime 103dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project nexttok(&ptr); // cstime 104dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project prio = atoi(nexttok(&ptr)); 105dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project nice = atoi(nexttok(&ptr)); 106dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project nexttok(&ptr); // threads 107dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project nexttok(&ptr); // itrealvalue 108dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project nexttok(&ptr); // starttime 109dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project vss = strtoul(nexttok(&ptr), 0, 10); // vsize 110dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project rss = strtoul(nexttok(&ptr), 0, 10); // rss 111dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project nexttok(&ptr); // rlim 112dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project nexttok(&ptr); // startcode 113dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project nexttok(&ptr); // endcode 114dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project nexttok(&ptr); // startstack 115dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project nexttok(&ptr); // kstkesp 116dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project eip = strtoul(nexttok(&ptr), 0, 10); // kstkeip 117dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project nexttok(&ptr); // signal 118dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project nexttok(&ptr); // blocked 119dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project nexttok(&ptr); // sigignore 120dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project nexttok(&ptr); // sigcatch 121dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project wchan = strtoul(nexttok(&ptr), 0, 10); // wchan 122dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project nexttok(&ptr); // nswap 123dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project nexttok(&ptr); // cnswap 124dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project nexttok(&ptr); // exit signal 125dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project nexttok(&ptr); // processor 126dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project rtprio = atoi(nexttok(&ptr)); // rt_priority 127dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project sched = atoi(nexttok(&ptr)); // scheduling policy 128dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 129dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project tty = atoi(nexttok(&ptr)); 130dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 131dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project if(tid != 0) { 132dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project ppid = pid; 133dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project pid = tid; 134dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project } 135dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 136dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project pw = getpwuid(stats.st_uid); 137dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project if(pw == 0) { 138dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project sprintf(user,"%d",(int)stats.st_uid); 139dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project } else { 140dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project strcpy(user,pw->pw_name); 141dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project } 142dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 143dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project if(!namefilter || !strncmp(name, namefilter, strlen(namefilter))) { 144392744175c4de67dc98e72da6745e6351118c985San Mehat printf("%-9s %-5d %-5d %-6d %-5d", user, pid, ppid, vss / 1024, rss * 4); 145dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project if(display_flags&SHOW_PRIO) 146dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project printf(" %-5d %-5d %-5d %-5d", prio, nice, rtprio, sched); 147392744175c4de67dc98e72da6745e6351118c985San Mehat if (display_flags & SHOW_POLICY) { 148392744175c4de67dc98e72da6745e6351118c985San Mehat SchedPolicy p; 149392744175c4de67dc98e72da6745e6351118c985San Mehat if (get_sched_policy(pid, &p) < 0) 150392744175c4de67dc98e72da6745e6351118c985San Mehat printf(" un "); 151392744175c4de67dc98e72da6745e6351118c985San Mehat else { 152392744175c4de67dc98e72da6745e6351118c985San Mehat if (p == SP_BACKGROUND) 153392744175c4de67dc98e72da6745e6351118c985San Mehat printf(" bg "); 154392744175c4de67dc98e72da6745e6351118c985San Mehat else if (p == SP_FOREGROUND) 155392744175c4de67dc98e72da6745e6351118c985San Mehat printf(" fg "); 156392744175c4de67dc98e72da6745e6351118c985San Mehat else 157392744175c4de67dc98e72da6745e6351118c985San Mehat printf(" er "); 158392744175c4de67dc98e72da6745e6351118c985San Mehat } 159392744175c4de67dc98e72da6745e6351118c985San Mehat } 160dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project printf(" %08x %08x %s %s", wchan, eip, state, cmdline[0] ? cmdline : name); 161dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project if(display_flags&SHOW_TIME) 162dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project printf(" (u:%d, s:%d)", utime, stime); 163392744175c4de67dc98e72da6745e6351118c985San Mehat 164dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project printf("\n"); 165dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project } 166dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return 0; 167dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 168dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 169dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 170dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectvoid ps_threads(int pid, char *namefilter) 171dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 172dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project char tmp[128]; 173dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project DIR *d; 174dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project struct dirent *de; 175dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 176dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project sprintf(tmp,"/proc/%d/task",pid); 177dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project d = opendir(tmp); 178dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project if(d == 0) return; 179dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 180dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project while((de = readdir(d)) != 0){ 181dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project if(isdigit(de->d_name[0])){ 182dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project int tid = atoi(de->d_name); 183dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project if(tid == pid) continue; 184dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project ps_line(pid, tid, namefilter); 185dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project } 186dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project } 187dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project closedir(d); 188dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 189dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 190dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectint ps_main(int argc, char **argv) 191dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 192dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project DIR *d; 193dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project struct dirent *de; 194dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project char *namefilter = 0; 195dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project int pidfilter = 0; 196dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project int threads = 0; 197dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 198dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project d = opendir("/proc"); 199dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project if(d == 0) return -1; 200dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 201dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project while(argc > 1){ 202dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project if(!strcmp(argv[1],"-t")) { 203dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project threads = 1; 204dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project } else if(!strcmp(argv[1],"-x")) { 205dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project display_flags |= SHOW_TIME; 206392744175c4de67dc98e72da6745e6351118c985San Mehat } else if(!strcmp(argv[1],"-P")) { 207392744175c4de67dc98e72da6745e6351118c985San Mehat display_flags |= SHOW_POLICY; 208dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project } else if(!strcmp(argv[1],"-p")) { 209dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project display_flags |= SHOW_PRIO; 210dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project } else if(isdigit(argv[1][0])){ 211dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project pidfilter = atoi(argv[1]); 212dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project } else { 213dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project namefilter = argv[1]; 214dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project } 215dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project argc--; 216dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project argv++; 217dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project } 218dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 219392744175c4de67dc98e72da6745e6351118c985San Mehat printf("USER PID PPID VSIZE RSS %s %s WCHAN PC NAME\n", 220392744175c4de67dc98e72da6745e6351118c985San Mehat (display_flags&SHOW_PRIO)?"PRIO NICE RTPRI SCHED ":"", 221392744175c4de67dc98e72da6745e6351118c985San Mehat (display_flags&SHOW_POLICY)?"PCY " : ""); 222dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project while((de = readdir(d)) != 0){ 223dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project if(isdigit(de->d_name[0])){ 224dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project int pid = atoi(de->d_name); 225dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project if(!pidfilter || (pidfilter == pid)) { 226dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project ps_line(pid, 0, namefilter); 227dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project if(threads) ps_threads(pid, namefilter); 228dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project } 229dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project } 230dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project } 231dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project closedir(d); 232dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project return 0; 233dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} 234dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 235