summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authored <ed@FreeBSD.org>2014-04-07 18:10:49 +0000
committered <ed@FreeBSD.org>2014-04-07 18:10:49 +0000
commit87c17a9c6666c07778d84cde29bff0fe8830ca77 (patch)
tree86add6f815ce421c32d599a69a835b29dee9b881 /lib
parentb9ab124041f69613e738fb1f1f6916cca7b0f786 (diff)
downloadFreeBSD-src-87c17a9c6666c07778d84cde29bff0fe8830ca77.zip
FreeBSD-src-87c17a9c6666c07778d84cde29bff0fe8830ca77.tar.gz
Implement kqueue(2) for procdesc(4).
kqueue(2) already supports EVFILT_PROC. Add an EVFILT_PROCDESC that behaves the same, but operates on a procdesc(4) instead. Only implement NOTE_EXIT for now. The nice thing about NOTE_EXIT is that it also returns the exit status of the process, meaning that we can now obtain this value, even if pdwait4(2) is still unimplemented. Notes: - Simply reuse EVFILT_NETDEV for EVFILT_PROCDESC. As both of these will be used on totally different descriptor types, this should not clash. - Let procdesc_kqops_event() reuse the same structure as filt_proc(). The only difference is that procdesc_kqops_event() should also be able to deal with the case where the process was already terminated after registration. Simply test this when hint == 0. - Fix some style(9) issues in filt_proc() to keep it consistent with the newly added procdesc_kqops_event(). - Save the exit status of the process in pd->pd_xstat, as we cannot pick up the proctree_lock from within procdesc_kqops_event(). Discussed on: arch@ Reviewed by: kib@
Diffstat (limited to 'lib')
-rw-r--r--lib/libc/sys/kqueue.220
-rw-r--r--lib/libc/sys/pdfork.29
2 files changed, 27 insertions, 2 deletions
diff --git a/lib/libc/sys/kqueue.2 b/lib/libc/sys/kqueue.2
index 75c8207..1b2951e 100644
--- a/lib/libc/sys/kqueue.2
+++ b/lib/libc/sys/kqueue.2
@@ -24,7 +24,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd November 4, 2013
+.Dd April 7, 2014
.Dt KQUEUE 2
.Os
.Sh NAME
@@ -412,6 +412,24 @@ and the child process will not signal a NOTE_CHILD event.
On return,
.Va fflags
contains the events which triggered the filter.
+.It EVFILT_PROCDESC
+Takes the process descriptor created by
+.Xr pdfork 2
+to monitor as the identifier and the events to watch for in
+.Va fflags ,
+and returns when the associated process performs one or more of the
+requested events.
+The events to monitor are:
+.Bl -tag -width XXNOTE_EXIT
+.It NOTE_EXIT
+The process has exited.
+The exit status will be stored in
+.Va data .
+.El
+.Pp
+On return,
+.Va fflags
+contains the events which triggered the filter.
.It EVFILT_SIGNAL
Takes the signal number to monitor as the identifier and returns
when the given signal is delivered to the process.
diff --git a/lib/libc/sys/pdfork.2 b/lib/libc/sys/pdfork.2
index 87f2c8c..a489515 100644
--- a/lib/libc/sys/pdfork.2
+++ b/lib/libc/sys/pdfork.2
@@ -32,7 +32,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd April 4, 2014
+.Dd April 7, 2014
.Dt PDFORK 2
.Os
.Sh NAME
@@ -117,6 +117,13 @@ and
allow waiting for process state transitions; currently only
.Dv POLLHUP
is defined, and will be raised when the process dies.
+Process state transitions can also be monitored using
+.Xr kqueue 2
+filter
+.Dv EVFILT_PROCDESC ;
+currently only
+.Dv NOTE_EXIT
+is implemented.
.Pp
.Xr close 2
will close the process descriptor unless
OpenPOWER on IntegriCloud