- Implement -q option for pgrep(1).

- Add regression test to test -q option.
This commit is contained in:
Pawel Jakub Dawidek 2010-02-12 18:52:24 +00:00
parent 2134e2ef57
commit 7b0706f670
3 changed files with 58 additions and 5 deletions

View File

@ -36,7 +36,7 @@
.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
.\" POSSIBILITY OF SUCH DAMAGE.
.\"
.Dd May 16, 2009
.Dd February 11, 2010
.Dt PKILL 1
.Os
.Sh NAME
@ -44,7 +44,7 @@
.Nd find or signal processes by name
.Sh SYNOPSIS
.Nm pgrep
.Op Fl LSafilnovx
.Op Fl LSafilnoqvx
.Op Fl F Ar pidfile
.Op Fl G Ar gid
.Op Fl M Ar core
@ -175,6 +175,8 @@ command.
Select only the newest (most recently started) of the matching processes.
.It Fl o
Select only the oldest (least recently started) of the matching processes.
.It Fl q
Do not write anything to standard output.
.It Fl s Ar sid
Restrict matches to processes with a session ID in the comma-separated
list

View File

@ -49,6 +49,7 @@ __FBSDID("$FreeBSD$");
#include <sys/time.h>
#include <sys/user.h>
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
@ -110,6 +111,7 @@ static int matchargs;
static int fullmatch;
static int kthreads;
static int cflags = REG_EXTENDED;
static int quiet;
static kvm_t *kd;
static pid_t mypid;
@ -180,10 +182,11 @@ main(int argc, char **argv)
debug_opt = 0;
pidfile = NULL;
pidfilelock = 0;
quiet = 0;
execf = NULL;
coref = _PATH_DEVNULL;
while ((ch = getopt(argc, argv, "DF:G:ILM:N:P:SU:ad:fg:ij:lnos:t:u:vx")) != -1)
while ((ch = getopt(argc, argv, "DF:G:ILM:N:P:SU:ad:fg:ij:lnoqs:t:u:vx")) != -1)
switch (ch) {
case 'D':
debug_opt++;
@ -258,6 +261,11 @@ main(int argc, char **argv)
oldest = 1;
criteria = 1;
break;
case 'q':
if (!pgrep)
usage();
quiet = 1;
break;
case 's':
makelist(&sidlist, LT_SID, optarg);
criteria = 1;
@ -549,7 +557,7 @@ usage(void)
const char *ustr;
if (pgrep)
ustr = "[-LSfilnovx] [-d delim]";
ustr = "[-LSfilnoqvx] [-d delim]";
else
ustr = "[-signal] [-ILfinovx]";
@ -567,6 +575,10 @@ show_process(const struct kinfo_proc *kp)
{
char **argv;
if (quiet) {
assert(pgrep);
return;
}
if ((longfmt || !pgrep) && matchargs &&
(argv = kvm_getargv(kd, kp, 0)) != NULL) {
printf("%d ", (int)kp->ki_pid);
@ -623,7 +635,8 @@ grepact(const struct kinfo_proc *kp)
{
show_process(kp);
printf("%s", delim);
if (!quiet)
printf("%s", delim);
return (1);
}

View File

@ -0,0 +1,38 @@
#!/bin/sh
# $FreeBSD$
base=`basename $0`
echo "1..4"
name="pgrep -q"
sleep0=`mktemp /tmp/$base.XXXXXX` || exit 1
sleep1=`mktemp /tmp/$base.XXXXXX` || exit 1
ln -sf /bin/sleep $sleep0
$sleep0 5 &
sleep 0.3
pid=$!
out="`pgrep -q -f $sleep0 2>&1`"
if [ $? -eq 0 ]; then
echo "ok 1 - $name"
else
echo "not ok 1 - $name"
fi
if [ -z "${out}" ]; then
echo "ok 2 - $name"
else
echo "not ok 2 - $name"
fi
out="`pgrep -q -f $sleep1 2>&1`"
if [ $? -ne 0 ]; then
echo "ok 3 - $name"
else
echo "not ok 3 - $name"
fi
if [ -z "${out}" ]; then
echo "ok 4 - $name"
else
echo "not ok 4 - $name"
fi
kill $pid
rm -f $sleep0 $sleep1