bug-hurd
[Top][All Lists]
Advanced

[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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]