- Implement -q option for pgrep(1).
- Add regression test to test -q option.
This commit is contained in:
parent
2134e2ef57
commit
7b0706f670
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=203802
@ -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
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
38
tools/regression/usr.bin/pkill/pgrep-q.t
Normal file
38
tools/regression/usr.bin/pkill/pgrep-q.t
Normal 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
|
Loading…
Reference in New Issue
Block a user