Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 12 Feb 2010 18:52:25 +0000 (UTC)
From:      Pawel Jakub Dawidek <pjd@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r203802 - in head: bin/pkill tools/regression/usr.bin/pkill
Message-ID:  <201002121852.o1CIqPm3099867@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: pjd
Date: Fri Feb 12 18:52:24 2010
New Revision: 203802
URL: http://svn.freebsd.org/changeset/base/203802

Log:
  - Implement -q option for pgrep(1).
  - Add regression test to test -q option.

Added:
  head/tools/regression/usr.bin/pkill/pgrep-q.t   (contents, props changed)
Modified:
  head/bin/pkill/pkill.1
  head/bin/pkill/pkill.c

Modified: head/bin/pkill/pkill.1
==============================================================================
--- head/bin/pkill/pkill.1	Fri Feb 12 18:48:18 2010	(r203801)
+++ head/bin/pkill/pkill.1	Fri Feb 12 18:52:24 2010	(r203802)
@@ -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

Modified: head/bin/pkill/pkill.c
==============================================================================
--- head/bin/pkill/pkill.c	Fri Feb 12 18:48:18 2010	(r203801)
+++ head/bin/pkill/pkill.c	Fri Feb 12 18:52:24 2010	(r203802)
@@ -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);
 }
 

Added: head/tools/regression/usr.bin/pkill/pgrep-q.t
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/tools/regression/usr.bin/pkill/pgrep-q.t	Fri Feb 12 18:52:24 2010	(r203802)
@@ -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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201002121852.o1CIqPm3099867>