git: 77f0e198d913 - main - procctl: add state flags to PROC_REAP_GETPIDS reports
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Sun, 16 Apr 2023 10:48:54 UTC
The branch main has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=77f0e198d9134b6ca2650d3a84d7db2d786ec0c0 commit 77f0e198d9134b6ca2650d3a84d7db2d786ec0c0 Author: Val Packett <val@packett.cool> AuthorDate: 2023-04-15 17:59:30 +0000 Commit: Konstantin Belousov <kib@FreeBSD.org> CommitDate: 2023-04-16 10:48:20 +0000 procctl: add state flags to PROC_REAP_GETPIDS reports For a process supervisor using the reaper API to track process subtrees, it is very useful to know the state of the processes on the list. Sponsored by: https://www.patreon.com/valpackett Reviewed by: kib MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D39585 --- lib/libc/sys/procctl.2 | 10 ++++++++-- sys/kern/kern_procctl.c | 6 ++++++ sys/sys/procctl.h | 3 +++ 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/lib/libc/sys/procctl.2 b/lib/libc/sys/procctl.2 index 97509d0fbf06..052fcb37fb9d 100644 --- a/lib/libc/sys/procctl.2 +++ b/lib/libc/sys/procctl.2 @@ -29,7 +29,7 @@ .\" .\" $FreeBSD$ .\" -.Dd September 2, 2021 +.Dd April 15, 2023 .Dt PROCCTL 2 .Os .Sh NAME @@ -302,7 +302,7 @@ of the process. The .Fa pi_flags field returns the following flags, further describing the descendant: -.Bl -tag -width REAPER_PIDINFO_REAPER +.Bl -tag -width REAPER_PIDINFO_EXITING .It Dv REAPER_PIDINFO_VALID Set to indicate that the .Vt procctl_reaper_pidinfo @@ -320,6 +320,12 @@ field identifies the direct child of the reaper. .It Dv REAPER_PIDINFO_REAPER The reported process is itself a reaper. The descendants of the subordinate reaper are not reported. +.It Dv REAPER_PIDINFO_ZOMBIE +The reported process is in the zombie state, ready to be reaped. +.It Dv REAPER_PIDINFO_STOPPED +The reported process is stopped by a SIGSTOP/SIGTSTP signal. +.It Dv REAPER_PIDINFO_EXITING +The reported process is in the process of exiting (but not yet a zombie). .El .It Dv PROC_REAP_KILL Request to deliver a signal to some subset of the descendants of the reaper. diff --git a/sys/kern/kern_procctl.c b/sys/kern/kern_procctl.c index 9d48b04dde48..a4f675c2938e 100644 --- a/sys/kern/kern_procctl.c +++ b/sys/kern/kern_procctl.c @@ -234,6 +234,12 @@ reap_getpids(struct thread *td, struct proc *p, void *data) pip->pi_flags |= REAPER_PIDINFO_CHILD; if ((p2->p_treeflag & P_TREE_REAPER) != 0) pip->pi_flags |= REAPER_PIDINFO_REAPER; + if ((p2->p_flag & P_STOPPED) != 0) + pip->pi_flags |= REAPER_PIDINFO_STOPPED; + if (p2->p_state == PRS_ZOMBIE) + pip->pi_flags |= REAPER_PIDINFO_ZOMBIE; + else if ((p2->p_flag & P_WEXIT) != 0) + pip->pi_flags |= REAPER_PIDINFO_EXITING; i++; } sx_sunlock(&proctree_lock); diff --git a/sys/sys/procctl.h b/sys/sys/procctl.h index 0fcb62e94bb9..2d4b19325bbf 100644 --- a/sys/sys/procctl.h +++ b/sys/sys/procctl.h @@ -102,6 +102,9 @@ struct procctl_reaper_pidinfo { #define REAPER_PIDINFO_VALID 0x00000001 #define REAPER_PIDINFO_CHILD 0x00000002 #define REAPER_PIDINFO_REAPER 0x00000004 +#define REAPER_PIDINFO_ZOMBIE 0x00000008 +#define REAPER_PIDINFO_STOPPED 0x00000010 +#define REAPER_PIDINFO_EXITING 0x00000020 struct procctl_reaper_pids { u_int rp_count;