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$
|
.\" $FreeBSD$
|
||||||
.\"
|
.\"
|
||||||
.Dd September 2, 2021
|
.Dd April 15, 2023
|
||||||
.Dt PROCCTL 2
|
.Dt PROCCTL 2
|
||||||
.Os
|
.Os
|
||||||
.Sh NAME
|
.Sh NAME
|
||||||
@ -302,7 +302,7 @@ of the process.
|
|||||||
The
|
The
|
||||||
.Fa pi_flags
|
.Fa pi_flags
|
||||||
field returns the following flags, further describing the descendant:
|
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
|
.It Dv REAPER_PIDINFO_VALID
|
||||||
Set to indicate that the
|
Set to indicate that the
|
||||||
.Vt procctl_reaper_pidinfo
|
.Vt procctl_reaper_pidinfo
|
||||||
@ -320,6 +320,12 @@ field identifies the direct child of the reaper.
|
|||||||
.It Dv REAPER_PIDINFO_REAPER
|
.It Dv REAPER_PIDINFO_REAPER
|
||||||
The reported process is itself a reaper.
|
The reported process is itself a reaper.
|
||||||
The descendants of the subordinate reaper are not reported.
|
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
|
.El
|
||||||
.It Dv PROC_REAP_KILL
|
.It Dv PROC_REAP_KILL
|
||||||
Request to deliver a signal to some subset of the descendants of the reaper.
|
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;
|
pip->pi_flags |= REAPER_PIDINFO_CHILD;
|
||||||
if ((p2->p_treeflag & P_TREE_REAPER) != 0)
|
if ((p2->p_treeflag & P_TREE_REAPER) != 0)
|
||||||
pip->pi_flags |= REAPER_PIDINFO_REAPER;
|
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++;
|
i++;
|
||||||
}
|
}
|
||||||
sx_sunlock(&proctree_lock);
|
sx_sunlock(&proctree_lock);
|
||||||
|
@ -102,6 +102,9 @@ struct procctl_reaper_pidinfo {
|
|||||||
#define REAPER_PIDINFO_VALID 0x00000001
|
#define REAPER_PIDINFO_VALID 0x00000001
|
||||||
#define REAPER_PIDINFO_CHILD 0x00000002
|
#define REAPER_PIDINFO_CHILD 0x00000002
|
||||||
#define REAPER_PIDINFO_REAPER 0x00000004
|
#define REAPER_PIDINFO_REAPER 0x00000004
|
||||||
|
#define REAPER_PIDINFO_ZOMBIE 0x00000008
|
||||||
|
#define REAPER_PIDINFO_STOPPED 0x00000010
|
||||||
|
#define REAPER_PIDINFO_EXITING 0x00000020
|
||||||
|
|
||||||
struct procctl_reaper_pids {
|
struct procctl_reaper_pids {
|
||||||
u_int rp_count;
|
u_int rp_count;
|
||||||
|
Loading…
Reference in New Issue
Block a user