int ps_main(int argc, char **argv) { DIR *d; struct dirent *de; char *namefilter = 0; int pidfilter = 0; int threads = 0; d = opendir("/proc"); if(d == 0) return -1; while(argc > 1){ if(!strcmp(argv[1],"-t")) { threads = 1; } else if(!strcmp(argv[1],"-x")) { display_flags |= SHOW_TIME; } else if(!strcmp(argv[1], "-Z")) { display_flags |= SHOW_MACLABEL; } else if(!strcmp(argv[1],"-P")) { display_flags |= SHOW_POLICY; } else if(!strcmp(argv[1],"-p")) { display_flags |= SHOW_PRIO; } else if(!strcmp(argv[1],"-c")) { display_flags |= SHOW_CPU; } else if(!strcmp(argv[1],"--abi")) { display_flags |= SHOW_ABI; } else if(isdigit(argv[1][0])){ pidfilter = atoi(argv[1]); } else { namefilter = argv[1]; } argc--; argv++; } if (display_flags & SHOW_MACLABEL) { printf("LABEL USER PID PPID NAME\n"); } else { printf("USER PID PPID VSIZE RSS %s%s %s WCHAN PC %sNAME\n", (display_flags&SHOW_CPU)?"CPU ":"", (display_flags&SHOW_PRIO)?"PRIO NICE RTPRI SCHED ":"", (display_flags&SHOW_POLICY)?"PCY " : "", (display_flags&SHOW_ABI)?"ABI " : ""); } while((de = readdir(d)) != 0){ if(isdigit(de->d_name[0])){ int pid = atoi(de->d_name); if(!pidfilter || (pidfilter == pid)) { ps_line(pid, 0, namefilter); if(threads) ps_threads(pid, namefilter); } } } closedir(d); return 0; }
static int ps_main(OBJ *obj, int argc, char **argv) { DIR *d; char buf[256]; struct dirent *de; char *namefilter = 0; int pidfilter = 0; int threads = 0; d = opendir("/proc"); if(d == 0) return -1; while(argc > 1){ if(!strcmp(argv[1],"-t")) { threads = 1; } else if(!strcmp(argv[1],"-x")) { display_flags |= SHOW_TIME; } else if(!strcmp(argv[1],"-p")) { display_flags |= SHOW_PRIO; } else if(isdigit(argv[1][0])){ pidfilter = atoi(argv[1]); } else { namefilter = argv[1]; } argc--; argv++; } PRINTF("USER PID PPID VSIZE RSS WCHAN PC NAME\n"); while((de = readdir(d)) != 0){ if(isdigit(de->d_name[0])){ int pid = atoi(de->d_name); if(!pidfilter || (pidfilter == pid)) { ps_line(obj, pid, 0, namefilter); if(threads) ps_threads(obj, pid, namefilter); } } } closedir(d); return 0; }
int ps_main(int argc, char **argv) { DIR *d; struct dirent *de; int pidfilter = 0; int threads = 0; while(argc > 1){ if(!strcmp(argv[1],"-t")) { threads = 1; } else if(!strcmp(argv[1],"-n")) { display_flags |= SHOW_NUMERIC_UID; } else if(!strcmp(argv[1],"-x")) { display_flags |= SHOW_TIME; } else if(!strcmp(argv[1], "-Z")) { display_flags |= SHOW_MACLABEL; } else if(!strcmp(argv[1],"-P")) { display_flags |= SHOW_POLICY; } else if(!strcmp(argv[1],"-p")) { display_flags |= SHOW_PRIO; } else if(!strcmp(argv[1],"-c")) { display_flags |= SHOW_CPU; } else if(!strcmp(argv[1],"--abi")) { display_flags |= SHOW_ABI; } else if(!strcmp(argv[1],"--ppid")) { ppid_filter = atoi(argv[2]); if (ppid_filter == 0) { /* Bug 26554285: Use printf because some apps require at least * one line of output to stdout even for errors. */ printf("bad ppid '%s'\n", argv[2]); return 1; } argc--; argv++; } else { pidfilter = atoi(argv[1]); if (pidfilter == 0) { /* Bug 26554285: Use printf because some apps require at least * one line of output to stdout even for errors. */ printf("bad pid '%s'\n", argv[1]); return 1; } } argc--; argv++; } if (display_flags & SHOW_MACLABEL) { printf("LABEL "); } printf("USER PID PPID VSIZE RSS %s%s %sWCHAN %*s %sNAME\n", (display_flags&SHOW_CPU)?"CPU ":"", (display_flags&SHOW_PRIO)?"PRIO NICE RTPRI SCHED ":"", (display_flags&SHOW_POLICY)?"PCY " : "", (int) PC_WIDTH, "PC", (display_flags&SHOW_ABI)?"ABI " : ""); d = opendir("/proc"); if(d == 0) return -1; while((de = readdir(d)) != 0){ if(isdigit(de->d_name[0])){ int pid = atoi(de->d_name); if(!pidfilter || (pidfilter == pid)) { ps_line(pid, 0); if(threads) ps_threads(pid); } } } closedir(d); return 0; }