aboutsummaryrefslogtreecommitdiff
path: root/sys/kern/sys_procdesc.c
diff options
context:
space:
mode:
authorDag-Erling Smørgrav <des@FreeBSD.org>2026-07-27 10:15:26 +0000
committerDag-Erling Smørgrav <des@FreeBSD.org>2026-07-27 10:15:26 +0000
commit2bacbbecb165dd761ea7ec2fc35630db61508cdf (patch)
treed95ffb95fef0fc0a03e1992a882def84223c540f /sys/kern/sys_procdesc.c
parent407b7bcc93862fe0c026e254bac8ec0e8318e7e6 (diff)
kqueue: Add NOTE_REAP
Add a NOTE_REAP event for EVFILTER_PROC which provides a notification when the process is reaped. MFC after: 1 week Sponsored by: Klara, Inc. Sponsored by: NetApp, Inc. Reviewed by: kib, markj Differential Revision: https://reviews.freebsd.org/D58313
Diffstat (limited to 'sys/kern/sys_procdesc.c')
-rw-r--r--sys/kern/sys_procdesc.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/sys/kern/sys_procdesc.c b/sys/kern/sys_procdesc.c
index 862b59262d0c..608771b9f38c 100644
--- a/sys/kern/sys_procdesc.c
+++ b/sys/kern/sys_procdesc.c
@@ -507,11 +507,14 @@ procdesc_kqops_event(struct knote *kn, long hint)
if ((kn->kn_sfflags & event) != 0)
kn->kn_fflags |= kn->kn_sfflags & event;
+ /* Report exit status */
+ if ((kn->kn_fflags & NOTE_EXIT) != 0)
+ kn->kn_data = pd->pd_xstat;
+
/* Process is gone, so flag the event as finished. */
- if ((event & NOTE_EXIT) != 0) {
+ if ((event & NOTE_REAP) != 0 ||
+ ((event & NOTE_EXIT) != 0 && (kn->kn_sfflags & NOTE_REAP) == 0)) {
kn->kn_flags |= EV_EOF | EV_ONESHOT;
- if (kn->kn_fflags & NOTE_EXIT)
- kn->kn_data = pd->pd_xstat;
if (kn->kn_fflags == 0)
kn->kn_flags |= EV_DROP;
return (1);