svn commit: r357141 - head/bin/pwait
Pawel Jakub Dawidek
pjd at FreeBSD.org
Sun Jan 26 11:02:52 UTC 2020
Author: pjd
Date: Sun Jan 26 11:02:51 2020
New Revision: 357141
URL: https://svnweb.freebsd.org/changeset/base/357141
Log:
Implement -o flag which tells pwait(1) to exit if any of the given processes
has terminated.
Sponsored by: Fudo Security
Modified:
head/bin/pwait/pwait.1
head/bin/pwait/pwait.c
Modified: head/bin/pwait/pwait.1
==============================================================================
--- head/bin/pwait/pwait.1 Sun Jan 26 10:54:16 2020 (r357140)
+++ head/bin/pwait/pwait.1 Sun Jan 26 11:02:51 2020 (r357141)
@@ -32,7 +32,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd March 7, 2017
+.Dd January 26, 2020
.Dt PWAIT 1
.Os
.Sh NAME
@@ -41,7 +41,7 @@
.Sh SYNOPSIS
.Nm
.Op Fl t Ar duration
-.Op Fl v
+.Op Fl ov
.Ar pid
\&...
.Sh DESCRIPTION
@@ -51,6 +51,8 @@ utility will wait until each of the given processes ha
.Pp
The following option is available:
.Bl -tag -width indent
+.It Fl o
+Exit when any of the given processes has terminated.
.It Fl t Ar duration
If any process is still running after
.Ar duration ,
Modified: head/bin/pwait/pwait.c
==============================================================================
--- head/bin/pwait/pwait.c Sun Jan 26 10:54:16 2020 (r357140)
+++ head/bin/pwait/pwait.c Sun Jan 26 11:02:51 2020 (r357141)
@@ -53,7 +53,7 @@ static void
usage(void)
{
- errx(EX_USAGE, "usage: pwait [-t timeout] [-v] pid ...");
+ errx(EX_USAGE, "usage: pwait [-t timeout] [-ov] pid ...");
}
/*
@@ -65,16 +65,22 @@ main(int argc, char *argv[])
struct itimerval itv;
int kq;
struct kevent *e;
- int tflag, verbose;
+ int oflag, tflag, verbose;
int opt, nleft, n, i, status;
long pid;
char *s, *end;
double timeout;
- tflag = verbose = 0;
+ oflag = 0;
+ tflag = 0;
+ verbose = 0;
memset(&itv, 0, sizeof(itv));
- while ((opt = getopt(argc, argv, "t:v")) != -1) {
+
+ while ((opt = getopt(argc, argv, "t:ov")) != -1) {
switch (opt) {
+ case 'o':
+ oflag = 1;
+ break;
case 't':
tflag = 1;
errno = 0;
@@ -144,10 +150,13 @@ main(int argc, char *argv[])
continue;
}
EV_SET(e + nleft, pid, EVFILT_PROC, EV_ADD, NOTE_EXIT, 0, NULL);
- if (kevent(kq, e + nleft, 1, NULL, 0, NULL) == -1)
+ if (kevent(kq, e + nleft, 1, NULL, 0, NULL) == -1) {
warn("%ld", pid);
- else
+ if (oflag)
+ exit(EX_OK);
+ } else {
nleft++;
+ }
}
if (nleft > 0 && tflag) {
@@ -187,6 +196,8 @@ main(int argc, char *argv[])
printf("%ld: terminated.\n",
(long)e[i].ident);
}
+ if (oflag)
+ exit(EX_OK);
--nleft;
}
}
More information about the svn-src-head
mailing list