diff options
| -rw-r--r-- | lib/libc/sys/kqueue.2 | 4 | ||||
| -rw-r--r-- | sys/kern/kern_event.c | 5 | ||||
| -rw-r--r-- | sys/kern/kern_exit.c | 5 |
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 |
