ps.c (256281) | ps.c (266279) |
---|---|
1/*- 2 * Copyright (c) 1990, 1993, 1994 3 * The Regents of the University of California. All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 33 unchanged lines hidden (view full) --- 42 43#if 0 44#ifndef lint 45static char sccsid[] = "@(#)ps.c 8.4 (Berkeley) 4/2/94"; 46#endif /* not lint */ 47#endif 48 49#include <sys/cdefs.h> | 1/*- 2 * Copyright (c) 1990, 1993, 1994 3 * The Regents of the University of California. All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 33 unchanged lines hidden (view full) --- 42 43#if 0 44#ifndef lint 45static char sccsid[] = "@(#)ps.c 8.4 (Berkeley) 4/2/94"; 46#endif /* not lint */ 47#endif 48 49#include <sys/cdefs.h> |
50__FBSDID("$FreeBSD: stable/10/bin/ps/ps.c 245635 2013-01-19 00:21:55Z jhb $"); | 50__FBSDID("$FreeBSD: stable/10/bin/ps/ps.c 266279 2014-05-17 02:32:47Z bdrewery $"); |
51 52#include <sys/param.h> | 51 52#include <sys/param.h> |
53#include <sys/jail.h> |
|
53#include <sys/proc.h> 54#include <sys/user.h> 55#include <sys/stat.h> 56#include <sys/ioctl.h> 57#include <sys/sysctl.h> 58#include <sys/mount.h> 59 60#include <ctype.h> 61#include <err.h> 62#include <errno.h> 63#include <fcntl.h> 64#include <grp.h> | 54#include <sys/proc.h> 55#include <sys/user.h> 56#include <sys/stat.h> 57#include <sys/ioctl.h> 58#include <sys/sysctl.h> 59#include <sys/mount.h> 60 61#include <ctype.h> 62#include <err.h> 63#include <errno.h> 64#include <fcntl.h> 65#include <grp.h> |
66#include <jail.h> |
|
65#include <kvm.h> 66#include <limits.h> 67#include <locale.h> 68#include <paths.h> 69#include <pwd.h> 70#include <stdio.h> 71#include <stdlib.h> 72#include <string.h> --- 46 unchanged lines hidden (view full) --- 119struct listinfo { 120 int count; 121 int maxcount; 122 int elemsize; 123 addelem_rtn *addelem; 124 const char *lname; 125 union { 126 gid_t *gids; | 67#include <kvm.h> 68#include <limits.h> 69#include <locale.h> 70#include <paths.h> 71#include <pwd.h> 72#include <stdio.h> 73#include <stdlib.h> 74#include <string.h> --- 46 unchanged lines hidden (view full) --- 121struct listinfo { 122 int count; 123 int maxcount; 124 int elemsize; 125 addelem_rtn *addelem; 126 const char *lname; 127 union { 128 gid_t *gids; |
129 int *jids; |
|
127 pid_t *pids; 128 dev_t *ttys; 129 uid_t *uids; 130 void *ptr; 131 } l; 132}; 133 134static int addelem_gid(struct listinfo *, const char *); | 130 pid_t *pids; 131 dev_t *ttys; 132 uid_t *uids; 133 void *ptr; 134 } l; 135}; 136 137static int addelem_gid(struct listinfo *, const char *); |
138static int addelem_jid(struct listinfo *, const char *); |
|
135static int addelem_pid(struct listinfo *, const char *); 136static int addelem_tty(struct listinfo *, const char *); 137static int addelem_uid(struct listinfo *, const char *); 138static void add_list(struct listinfo *, const char *); 139static void descendant_sort(KINFO *, int); 140static void format_output(KINFO *); 141static void *expand_list(struct listinfo *); 142static const char * --- 15 unchanged lines hidden (view full) --- 158 "tt,time,command"; 159static char o1[] = "pid"; 160static char o2[] = "tt,state,time,command"; 161static char ufmt[] = "user,pid,%cpu,%mem,vsz,rss,tt,state,start,time,command"; 162static char vfmt[] = "pid,state,time,sl,re,pagein,vsz,rss,lim,tsiz," 163 "%cpu,%mem,command"; 164static char Zfmt[] = "label"; 165 | 139static int addelem_pid(struct listinfo *, const char *); 140static int addelem_tty(struct listinfo *, const char *); 141static int addelem_uid(struct listinfo *, const char *); 142static void add_list(struct listinfo *, const char *); 143static void descendant_sort(KINFO *, int); 144static void format_output(KINFO *); 145static void *expand_list(struct listinfo *); 146static const char * --- 15 unchanged lines hidden (view full) --- 162 "tt,time,command"; 163static char o1[] = "pid"; 164static char o2[] = "tt,state,time,command"; 165static char ufmt[] = "user,pid,%cpu,%mem,vsz,rss,tt,state,start,time,command"; 166static char vfmt[] = "pid,state,time,sl,re,pagein,vsz,rss,lim,tsiz," 167 "%cpu,%mem,command"; 168static char Zfmt[] = "label"; 169 |
166#define PS_ARGS "AaCcde" OPT_LAZY_f "G:gHhjLlM:mN:O:o:p:rSTt:U:uvwXxZ" | 170#define PS_ARGS "AaCcde" OPT_LAZY_f "G:gHhjJ:LlM:mN:O:o:p:rSTt:U:uvwXxZ" |
167 168int 169main(int argc, char *argv[]) 170{ | 171 172int 173main(int argc, char *argv[]) 174{ |
171 struct listinfo gidlist, pgrplist, pidlist; | 175 struct listinfo gidlist, jidlist, pgrplist, pidlist; |
172 struct listinfo ruidlist, sesslist, ttylist, uidlist; 173 struct kinfo_proc *kp; 174 KINFO *kinfo = NULL, *next_KINFO; 175 KINFO_STR *ks; 176 struct varent *vent; 177 struct winsize ws; 178 const char *nlistf, *memf, *fmtstr, *str; 179 char *cols; --- 23 unchanged lines hidden (view full) --- 203 argv[1] = kludge_oldps_options(PS_ARGS, argv[1], argv[2]); 204 205 pidmax_init(); 206 207 all = descendancy = _fmt = nselectors = optfatal = 0; 208 prtheader = showthreads = wflag = xkeep_implied = 0; 209 xkeep = -1; /* Neither -x nor -X. */ 210 init_list(&gidlist, addelem_gid, sizeof(gid_t), "group"); | 176 struct listinfo ruidlist, sesslist, ttylist, uidlist; 177 struct kinfo_proc *kp; 178 KINFO *kinfo = NULL, *next_KINFO; 179 KINFO_STR *ks; 180 struct varent *vent; 181 struct winsize ws; 182 const char *nlistf, *memf, *fmtstr, *str; 183 char *cols; --- 23 unchanged lines hidden (view full) --- 207 argv[1] = kludge_oldps_options(PS_ARGS, argv[1], argv[2]); 208 209 pidmax_init(); 210 211 all = descendancy = _fmt = nselectors = optfatal = 0; 212 prtheader = showthreads = wflag = xkeep_implied = 0; 213 xkeep = -1; /* Neither -x nor -X. */ 214 init_list(&gidlist, addelem_gid, sizeof(gid_t), "group"); |
215 init_list(&jidlist, addelem_jid, sizeof(int), "jail id"); |
|
211 init_list(&pgrplist, addelem_pid, sizeof(pid_t), "process group"); 212 init_list(&pidlist, addelem_pid, sizeof(pid_t), "process id"); 213 init_list(&ruidlist, addelem_uid, sizeof(uid_t), "ruser"); 214 init_list(&sesslist, addelem_pid, sizeof(pid_t), "session id"); 215 init_list(&ttylist, addelem_tty, sizeof(dev_t), "tty"); 216 init_list(&uidlist, addelem_uid, sizeof(uid_t), "user"); 217 memf = _PATH_DEVNULL; 218 nlistf = NULL; --- 51 unchanged lines hidden (view full) --- 270 break; /* no-op */ 271#endif 272 case 'H': 273 showthreads = KERN_PROC_INC_THREAD; 274 break; 275 case 'h': 276 prtheader = ws.ws_row > 5 ? ws.ws_row : 22; 277 break; | 216 init_list(&pgrplist, addelem_pid, sizeof(pid_t), "process group"); 217 init_list(&pidlist, addelem_pid, sizeof(pid_t), "process id"); 218 init_list(&ruidlist, addelem_uid, sizeof(uid_t), "ruser"); 219 init_list(&sesslist, addelem_pid, sizeof(pid_t), "session id"); 220 init_list(&ttylist, addelem_tty, sizeof(dev_t), "tty"); 221 init_list(&uidlist, addelem_uid, sizeof(uid_t), "user"); 222 memf = _PATH_DEVNULL; 223 nlistf = NULL; --- 51 unchanged lines hidden (view full) --- 275 break; /* no-op */ 276#endif 277 case 'H': 278 showthreads = KERN_PROC_INC_THREAD; 279 break; 280 case 'h': 281 prtheader = ws.ws_row > 5 ? ws.ws_row : 22; 282 break; |
283 case 'J': 284 add_list(&jidlist, optarg); 285 xkeep_implied = 1; 286 nselectors++; 287 break; |
|
278 case 'j': 279 parsefmt(jfmt, 0); 280 _fmt = 1; 281 jfmt[0] = '\0'; 282 break; 283 case 'L': 284 showkey(); 285 exit(0); --- 247 unchanged lines hidden (view full) --- 533 } 534 if (nselectors == 0) 535 goto keepit; 536 if (gidlist.count > 0) { 537 for (elem = 0; elem < gidlist.count; elem++) 538 if (kp->ki_rgid == gidlist.l.gids[elem]) 539 goto keepit; 540 } | 288 case 'j': 289 parsefmt(jfmt, 0); 290 _fmt = 1; 291 jfmt[0] = '\0'; 292 break; 293 case 'L': 294 showkey(); 295 exit(0); --- 247 unchanged lines hidden (view full) --- 543 } 544 if (nselectors == 0) 545 goto keepit; 546 if (gidlist.count > 0) { 547 for (elem = 0; elem < gidlist.count; elem++) 548 if (kp->ki_rgid == gidlist.l.gids[elem]) 549 goto keepit; 550 } |
551 if (jidlist.count > 0) { 552 for (elem = 0; elem < jidlist.count; elem++) 553 if (kp->ki_jid == jidlist.l.jids[elem]) 554 goto keepit; 555 } |
|
541 if (pgrplist.count > 0) { 542 for (elem = 0; elem < pgrplist.count; elem++) 543 if (kp->ki_pgid == 544 pgrplist.l.pids[elem]) 545 goto keepit; 546 } 547 if (ruidlist.count > 0) { 548 for (elem = 0; elem < ruidlist.count; elem++) --- 112 unchanged lines hidden (view full) --- 661 (void)putchar('\n'); 662 if (prtheader && lineno++ == prtheader - 4) { 663 (void)putchar('\n'); 664 printheader(); 665 lineno = 0; 666 } 667 } 668 free_list(&gidlist); | 556 if (pgrplist.count > 0) { 557 for (elem = 0; elem < pgrplist.count; elem++) 558 if (kp->ki_pgid == 559 pgrplist.l.pids[elem]) 560 goto keepit; 561 } 562 if (ruidlist.count > 0) { 563 for (elem = 0; elem < ruidlist.count; elem++) --- 112 unchanged lines hidden (view full) --- 676 (void)putchar('\n'); 677 if (prtheader && lineno++ == prtheader - 4) { 678 (void)putchar('\n'); 679 printheader(); 680 lineno = 0; 681 } 682 } 683 free_list(&gidlist); |
684 free_list(&jidlist); |
|
669 free_list(&pidlist); 670 free_list(&pgrplist); 671 free_list(&ruidlist); 672 free_list(&sesslist); 673 free_list(&ttylist); 674 free_list(&uidlist); 675 for (i = 0; i < nkept; i++) 676 free(kinfo[i].ki_d.prefix); --- 45 unchanged lines hidden (view full) --- 722 } 723 if (inf->count >= inf->maxcount) 724 expand_list(inf); 725 inf->l.gids[(inf->count)++] = grp->gr_gid; 726 return (1); 727} 728 729static int | 685 free_list(&pidlist); 686 free_list(&pgrplist); 687 free_list(&ruidlist); 688 free_list(&sesslist); 689 free_list(&ttylist); 690 free_list(&uidlist); 691 for (i = 0; i < nkept; i++) 692 free(kinfo[i].ki_d.prefix); --- 45 unchanged lines hidden (view full) --- 738 } 739 if (inf->count >= inf->maxcount) 740 expand_list(inf); 741 inf->l.gids[(inf->count)++] = grp->gr_gid; 742 return (1); 743} 744 745static int |
746addelem_jid(struct listinfo *inf, const char *elem) 747{ 748 int tempid; 749 750 if (*elem == '\0') { 751 warnx("Invalid (zero-length) jail id"); 752 optfatal = 1; 753 return (0); /* Do not add this value. */ 754 } 755 756 tempid = jail_getid(elem); 757 if (tempid < 0) { 758 warnx("Invalid %s: %s", inf->lname, elem); 759 optfatal = 1; 760 return (0); 761 } 762 763 if (inf->count >= inf->maxcount) 764 expand_list(inf); 765 inf->l.jids[(inf->count)++] = tempid; 766 return (1); 767} 768 769static int |
|
730addelem_pid(struct listinfo *inf, const char *elem) 731{ 732 char *endp; 733 long tempid; 734 735 if (*elem == '\0') { 736 warnx("Invalid (zero-length) process id"); 737 optfatal = 1; --- 630 unchanged lines hidden (view full) --- 1368 1369static void 1370usage(void) 1371{ 1372#define SINGLE_OPTS "[-aCcde" OPT_LAZY_f "HhjlmrSTuvwXxZ]" 1373 1374 (void)fprintf(stderr, "%s\n%s\n%s\n%s\n", 1375 "usage: ps " SINGLE_OPTS " [-O fmt | -o fmt] [-G gid[,gid...]]", | 770addelem_pid(struct listinfo *inf, const char *elem) 771{ 772 char *endp; 773 long tempid; 774 775 if (*elem == '\0') { 776 warnx("Invalid (zero-length) process id"); 777 optfatal = 1; --- 630 unchanged lines hidden (view full) --- 1408 1409static void 1410usage(void) 1411{ 1412#define SINGLE_OPTS "[-aCcde" OPT_LAZY_f "HhjlmrSTuvwXxZ]" 1413 1414 (void)fprintf(stderr, "%s\n%s\n%s\n%s\n", 1415 "usage: ps " SINGLE_OPTS " [-O fmt | -o fmt] [-G gid[,gid...]]", |
1376 " [-M core] [-N system]", | 1416 " [-J jid[,jid...]] [-M core] [-N system]", |
1377 " [-p pid[,pid...]] [-t tty[,tty...]] [-U user[,user...]]", 1378 " ps [-L]"); 1379 exit(1); 1380} | 1417 " [-p pid[,pid...]] [-t tty[,tty...]] [-U user[,user...]]", 1418 " ps [-L]"); 1419 exit(1); 1420} |