Reduce fork calls in daemon

The forked child process is a grandchild process from the viewpoint of
the process which invoked the caller process.  That means the child is
detached at that point, and it does not need to fork twice.
This commit is contained in:
Nobuyoshi Nakada 2022-09-19 00:46:52 +09:00
parent 1c9381283e
commit ae07336529
Notes: git 2022-09-19 15:34:39 +09:00

View File

@ -7109,20 +7109,14 @@ rb_daemon(int nochdir, int noclose)
#else
int n;
#define fork_daemon() \
switch (rb_fork_ruby(NULL)) { \
case -1: return -1; \
case 0: break; \
default: _exit(EXIT_SUCCESS); \
switch (rb_fork_ruby(NULL)) {
case -1: return -1;
case 0: break;
default: _exit(EXIT_SUCCESS);
}
fork_daemon();
if (setsid() < 0) return -1;
/* must not be process-leader */
fork_daemon();
if (!nochdir)
err = chdir("/");