--- pgrep.1 +++ pgrep.1 2007-10-05 22:36:42.000000000 +1000 @@ -7,7 +7,7 @@ pgrep, pkill \- look up or signal processes based on name and other attributes .SH SYNOPSIS -pgrep [\-flvx] [\-d \fIdelimiter\fP] [\-n|\-o] [\-P \fIppid\fP,...] [\-g \fIpgrp\fP,...] +pgrep [\-cflvx] [\-d \fIdelimiter\fP] [\-n|\-o] [\-P \fIppid\fP,...] [\-g \fIpgrp\fP,...] .br [\-s \fIsid\fP,...] [\-u \fIeuid\fP,...] [\-U \fIuid\fP,...] [\-G \fIgid\fP,...] .br @@ -38,6 +38,9 @@ .SH OPTIONS .TP +\-c +Suppress normal output; instead print a count of matching processes. +.TP \-d \fIdelimiter\fP Sets the string used to delimit each process ID in the output (by default a newline). (\fBpgrep\fP only.) --- pgrep.c +++ pgrep.c 2007-10-05 22:35:52.000000000 +1000 @@ -54,6 +54,7 @@ static int opt_newest = 0; static int opt_negate = 0; static int opt_exact = 0; +static int opt_count = 0; static int opt_signal = SIGTERM; static int opt_lock = 0; static int opt_case = 0; @@ -77,7 +78,7 @@ if (i_am_pkill) fprintf (stderr, "Usage: pkill [-SIGNAL] [-fvx] "); else - fprintf (stderr, "Usage: pgrep [-flvx] [-d DELIM] "); + fprintf (stderr, "Usage: pgrep [-cflvx] [-d DELIM] "); fprintf (stderr, "[-n|-o] [-P PPIDLIST] [-g PGRPLIST] [-s SIDLIST]\n" "\t[-u EUIDLIST] [-U UIDLIST] [-G GIDLIST] [-t TERMLIST] " "[PATTERN]\n"); @@ -562,7 +563,7 @@ strcat (opts, "ld:"); } - strcat (opts, "LF:fnovxP:g:s:u:U:G:t:?V"); + strcat (opts, "LF:cfnovxP:g:s:u:U:G:t:?V"); while ((opt = getopt (argc, argv, opts)) != -1) { switch (opt) { @@ -610,6 +611,9 @@ exit(EXIT_SUCCESS); // case 'c': // Solaris: match by contract ID // break; + case 'c': + opt_count = 1; + break; case 'd': // Solaris: change the delimiter opt_delim = strdup (optarg); break; @@ -721,10 +725,14 @@ procs[i].num, strerror (errno)); } } else { - if (opt_long) - output_strlist(procs,num); - else - output_numlist(procs,num); + if (opt_count) { + fprintf(stdout, "%ld\n", num); + } else { + if (opt_long) + output_strlist (procs,num); + else + output_numlist (procs,num); + } } return !num; // exit(EXIT_SUCCESS) if match, otherwise exit(EXIT_FAILURE) }