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
This commit is contained in:
parent
82a036d86a
commit
77f0e198d9
@ -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.
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user