[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 1/4] startup: Mark all essential tasks as our children
From: |
Damien Zammit |
Subject: |
[PATCH 1/4] startup: Mark all essential tasks as our children |
Date: |
Sat, 17 Apr 2021 19:12:09 +1000 |
---
startup/startup.c | 49 +++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 49 insertions(+)
diff --git a/startup/startup.c b/startup/startup.c
index 9faeb462..4278954a 100644
--- a/startup/startup.c
+++ b/startup/startup.c
@@ -831,6 +831,52 @@ main (int argc, char **argv, char **envp)
}
}
+static void
+proc_child_essential_processes (void)
+{
+ pid_t *pp;
+ size_t npids = 0;
+ error_t err;
+ int ind;
+ process_t process;
+
+ err = proc_getallpids (procserver, &pp, &npids);
+ assert_perror_backtrace (err);
+
+ for (ind = 0; ind < npids; ind++)
+ {
+ task_t task;
+
+ /* Skip INIT */
+ if (pp[ind] == 1)
+ continue;
+
+ err = proc_pid2task (procserver, pp[ind], &task);
+ assert_perror_backtrace (err);
+
+ /* ignore startup, proc, auth and kernel */
+ if (task != mach_task_self ()
+ && task != proctask
+ && task != authtask
+ && task != fstask
+ && task != kernel_task)
+ {
+ boolean_t essential = FALSE;
+
+ err = proc_task2proc (procserver, task, &process);
+ assert_perror_backtrace (err);
+
+ proc_is_important (process, &essential);
+ if (essential)
+ {
+ /* Make this essential process our child. */
+ err = proc_child (procserver, task);
+ assert_perror_backtrace (err);
+ }
+ }
+ }
+}
+
void
launch_core_servers (void)
{
@@ -863,6 +909,9 @@ launch_core_servers (void)
assert_perror_backtrace (err);
proc_set_exe (procserver, "/hurd/startup");
+ /* Declare that all essential processes are our children. */
+ proc_child_essential_processes ();
+
/* Declare that the filesystem and auth are our children. */
err = proc_child (procserver, fstask);
assert_perror_backtrace (err);
--
2.31.0