pgrep: add -c option for counting number of matched proceesses
A patch from Debian. Bug-Debian: http://bugs.debian.org/375791 Backported-by: Sami Kerola <kerolasa@iki.fi>
This commit is contained in:
parent
5d29bfedc8
commit
6bc22a379f
4
pgrep.1
4
pgrep.1
@ -8,7 +8,7 @@ pgrep, pkill \- look up or signal processes based on name and other attributes
|
||||
|
||||
.SH SYNOPSIS
|
||||
.na
|
||||
\fBpgrep\fR [\fB\-flvx\fR] [\fB\-d\ \fIdelimiter\fR] [\fB\-n\fR|\fB\-o\fR] \
|
||||
\fBpgrep\fR [\fB\-cflvx\fR] [\fB\-d\ \fIdelimiter\fR] [\fB\-n\fR|\fB\-o\fR] \
|
||||
[\fB\-P\ \fIppid\fR,...] [\fB\-g\ \fIpgrp\fR,...] [\fB\-s\ \fIsid\fR,...] \
|
||||
[\fB\-u\ \fIeuid\fR,...] [\fB\-U\ \fIuid\fR,...] [\fB\-G\ \fIgid\fR,...] \
|
||||
[\fB\-t\ \fIterm\fR,...] [\fIpattern\fR]
|
||||
@ -41,6 +41,8 @@ will list the processes owned by \fBroot\fP OR \fBdaemon\fP.
|
||||
to each process instead of listing them on stdout.
|
||||
|
||||
.SH OPTIONS
|
||||
\-c
|
||||
Suppress normal output; instead print a count of matching processes.
|
||||
.TP
|
||||
\fB\-d \fIdelimiter\fP
|
||||
Sets the string used to delimit each process ID in the output (by
|
||||
|
20
pgrep.c
20
pgrep.c
@ -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;
|
||||
@ -79,7 +80,7 @@ static int usage (int opt)
|
||||
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");
|
||||
@ -567,7 +568,7 @@ static void parse_opts (int argc, char **argv)
|
||||
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) {
|
||||
@ -615,6 +616,9 @@ static void parse_opts (int argc, char **argv)
|
||||
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;
|
||||
@ -726,10 +730,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)
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user