Description: c option for pgrep for counting number of matched proceesses Author: Craig Small Bug-Debian: http://bugs.debian.org/375791 Index: b/pgrep.1 =================================================================== --- a/pgrep.1 2009-11-24 20:53:02.000000000 +1100 +++ b/pgrep.1 2009-11-24 21:00:45.000000000 +1100 @@ -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.) Index: b/pgrep.c =================================================================== --- a/pgrep.c 2009-11-24 21:00:41.000000000 +1100 +++ b/pgrep.c 2009-11-24 21:00:45.000000000 +1100 @@ -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; @@ -79,7 +80,7 @@ if (i_am_pkill) fprintf (fp, "Usage: pkill [-SIGNAL] [-fvx] "); else - fprintf (fp, "Usage: pgrep [-flvx] [-d DELIM] "); + fprintf (fp, "Usage: pgrep [-cflvx] [-d DELIM] "); fprintf (fp, "[-n|-o] [-P PPIDLIST] [-g PGRPLIST] [-s SIDLIST]\n" "\t[-u EUIDLIST] [-U UIDLIST] [-G GIDLIST] [-t TERMLIST] " "[PATTERN]\n"); @@ -565,7 +566,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) { @@ -613,6 +614,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; @@ -724,10 +728,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) }