From: Tobias Heider Subject: httpd: don't orphan children To: tech@openbsd.org Date: Thu, 4 Apr 2024 19:05:43 +0200 Calling daemon() after proc_init() will detach the children from the parent process. Also return errno if daemon fails. See ps auxf: root 70446 0.0 0.1 1964 2360 ?? Ip Wed11PM 0:00.02 - /usr/sbin/httpd www 22440 0.0 0.1 2192 4704 ?? Ipc Wed11PM 0:02.88 - httpd: server (httpd) www 27514 0.0 0.1 1664 2940 ?? Ipc Wed11PM 0:00.02 - httpd: logger (httpd) which should be: root 43158 0.0 0.1 1964 2344 ?? Ip 6:58PM 0:00.01 - /usr/sbin/httpd www 64572 0.0 0.1 1932 4280 ?? Ipc 6:58PM 0:00.01 |-- httpd: server (h www 16700 0.0 0.1 1660 2804 ?? Ipc 6:58PM 0:00.01 `-- httpd: logger (h patch syncs what iked does. ok? diff /home/user/got/co/src commit - 3b374a56007af68fb6fd1926b370d0a3e8d6dbca path + /home/user/got/co/src blob - af863cf2710dadce01a85cb618fe5bfbb91b9adc file + usr.sbin/httpd/httpd.c --- usr.sbin/httpd/httpd.c +++ usr.sbin/httpd/httpd.c @@ -220,8 +220,6 @@ main(int argc, char *argv[]) proc_init(ps, procs, nitems(procs), debug, argc0, argv, proc_id); log_procinit("parent"); - if (!debug && daemon(1, 0) == -1) - err(1, "failed to daemonize"); if (ps->ps_noaction == 0) log_info("startup"); blob - e8b08dd23175817590214abb7b433caf541e215d file + usr.sbin/httpd/proc.c --- usr.sbin/httpd/proc.c +++ usr.sbin/httpd/proc.c @@ -203,6 +203,8 @@ proc_init(struct privsep *ps, struct privsep_proc *pro if (proc_id == PROC_PARENT) { privsep_process = PROC_PARENT; + if (!debug && daemon(1, 0) == -1) + fatal("failed to daemonize"); proc_setup(ps, procs, nproc); /*