summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlavio Cruz <flaviocruz@gmail.com>2024-02-16 13:26:29 -0500
committerSamuel Thibault <samuel.thibault@ens-lyon.org>2024-02-17 02:24:23 +0100
commitd0e63556c4fd10cf3627b6e5c292a1f178a5578f (patch)
tree7a4098d700723156ec9c7bde1085b0213fa90192
parent786fc07a9f990224db98f40ca819c81ab4e59966 (diff)
Add proc_getchildren_rusage RPC and track rusage for children and descendants
Message-ID: <20240216182630.5770-2-flaviocruz@gmail.com>
-rw-r--r--hurd/process.defs6
-rw-r--r--proc/info.c8
-rw-r--r--proc/proc.h4
-rw-r--r--proc/wait.c2
4 files changed, 19 insertions, 1 deletions
diff --git a/hurd/process.defs b/hurd/process.defs
index 9a8b3a1b..007aa2b2 100644
--- a/hurd/process.defs
+++ b/hurd/process.defs
@@ -466,3 +466,9 @@ simpleroutine proc_reauthenticate_reassign (
that the user has received from auth_user_authenticate call. */
simpleroutine proc_reauthenticate_complete (
process: process_t);
+
+/* Returns the rusage information for the children that were waited
+ * for plus all their descendants. */
+routine proc_getchildren_rusage (
+ process: process_t;
+ out children_rusage: rusage_t);
diff --git a/proc/info.c b/proc/info.c
index 2d85662d..e5b0f472 100644
--- a/proc/info.c
+++ b/proc/info.c
@@ -1093,3 +1093,11 @@ S_proc_get_exe (struct proc *callerp,
return 0;
}
+kern_return_t
+S_proc_getchildren_rusage (struct proc *p, struct rusage *ru)
+{
+ if (!p)
+ return EOPNOTSUPP;
+ *ru = p->p_child_rusage;
+ return 0;
+}
diff --git a/proc/proc.h b/proc/proc.h
index a83a5090..bbba0958 100644
--- a/proc/proc.h
+++ b/proc/proc.h
@@ -76,7 +76,9 @@ struct proc
int p_sigcode;
struct rusage p_rusage; /* my usage if I'm dead, to return via wait */
- struct rusage p_child_rusage; /* accumulates p_rusage of all dead children */
+ /* Accumulates p_rusage of all dead children, including
+ * grandchildren and their descendants. */
+ struct rusage p_child_rusage;
unsigned int p_exec:1; /* has called proc_mark_exec */
unsigned int p_stopped:1; /* has called proc_mark_stop */
diff --git a/proc/wait.c b/proc/wait.c
index 4551d289..a31b0e73 100644
--- a/proc/wait.c
+++ b/proc/wait.c
@@ -156,6 +156,8 @@ alert_parent (struct proc *p)
{
/* We accumulate the aggregate usage stats of all our dead children. */
rusage_add (&p->p_parent->p_child_rusage, &p->p_rusage);
+ /* ... and descendants. */
+ rusage_add (&p->p_parent->p_child_rusage, &p->p_child_rusage);
send_signal (p->p_parent->p_msgport, SIGCHLD, CLD_EXITED, p->p_parent->p_task);