--- pgrep.1 +++ pgrep.1 2007-10-05 14:36:42.000000000 +0200 @@ -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 @@ to each process instead of listing them .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 2009-05-11 12:38:44.945901308 +0200 @@ -54,6 +54,7 @@ static int opt_oldest = 0; 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; @@ -564,7 +565,7 @@ static void parse_opts (int argc, char * 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) { @@ -612,6 +613,9 @@ static void parse_opts (int argc, char * 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; @@ -723,10 +727,14 @@ int main (int argc, char *argv[]) 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) }