summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/libc/sys/kqueue.24
-rw-r--r--sys/kern/kern_event.c5
-rw-r--r--sys/kern/kern_exit.c5
3 files changed, 12 insertions, 2 deletions
diff --git a/lib/libc/sys/kqueue.2 b/lib/libc/sys/kqueue.2
index 9d3f6bf04aff..7501ff2b17a6 100644
--- a/lib/libc/sys/kqueue.2
+++ b/lib/libc/sys/kqueue.2
@@ -290,6 +290,10 @@ The events to monitor are:
.Bl -tag -width XXNOTE_TRACKERR
.It NOTE_EXIT
The process has exited.
+The
+.Xr wait 2 -style
+exit status is returned in
+.Va data .
.It NOTE_FORK
The process has called
.Fn fork .
diff --git a/sys/kern/kern_event.c b/sys/kern/kern_event.c
index c22b24878cc6..46c8f2641e76 100644
--- a/sys/kern/kern_event.c
+++ b/sys/kern/kern_event.c
@@ -264,6 +264,11 @@ filt_proc(struct knote *kn, long hint)
if (event == NOTE_EXIT) {
kn->kn_status |= KN_DETACHED;
kn->kn_flags |= (EV_EOF | EV_ONESHOT);
+ /*
+ * Return the 16 bits of the wait(2) value.
+ */
+ if (kn->kn_sfflags & NOTE_EXIT)
+ kn->kn_data = (intptr_t)hint & 0xffff;
return (1);
}
diff --git a/sys/kern/kern_exit.c b/sys/kern/kern_exit.c
index 9115f9775a36..0b160608726f 100644
--- a/sys/kern/kern_exit.c
+++ b/sys/kern/kern_exit.c
@@ -307,9 +307,10 @@ exit1(p, rv)
switchticks = ticks;
/*
- * notify interested parties of our demise.
+ * Notify interested parties of our demise. Pass the lower (only)
+ * 16 bits of our exit code along with it.
*/
- KNOTE(&p->p_klist, NOTE_EXIT);
+ KNOTE(&p->p_klist, NOTE_EXIT | (rv & 0xffff));
/*
* Notify parent that we're gone. If parent has the PS_NOCLDWAIT