--- 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