MINOR: startup: change session/process group settings

Change the way the process groups are set. Indeed setsid() was called
for every processes which caused the worker to have a different process
group than the master.

This patch behave in a better way:

- In daemon mode only, each child do a setsid()
- In master worker + daemon mode, the setsid() is done in the master before
forking the children
- In any foreground mode, we don't do a setsid()

Could be backported in 1.8 but the master-worker mode is mostly used
with systemd which rely on cgroups so that won't affect much people.
This commit is contained in:
William Lallemand 2018-07-04 15:31:23 +02:00 committed by Willy Tarreau
parent 70d318ccb7
commit bfd8eb5909
1 changed files with 5 additions and 5 deletions

View File

@ -2775,10 +2775,10 @@ int main(int argc, char **argv)
ha_alert("[%s.main()] Cannot fork.\n", argv[0]);
protocol_unbind_all();
exit(1); /* there has been an error */
}
/* parent leave to daemonize */
if (ret > 0)
} else if (ret > 0) { /* parent leave to daemonize */
exit(0);
} else /* change the process group ID in the child (master process) */
setsid();
}
if (global.mode & MODE_MWORKER) {
@ -2880,7 +2880,6 @@ int main(int argc, char **argv)
global.mode &= ~MODE_VERBOSE;
global.mode |= MODE_QUIET; /* ensure that we won't say anything from now */
setsid();
}
mworker_wait();
@ -3005,6 +3004,7 @@ int main(int argc, char **argv)
global.mode |= MODE_QUIET; /* ensure that we won't say anything from now */
}
pid = getpid(); /* update child's pid */
if (!(global.mode & MODE_MWORKER)) /* in mworker mode we don't want a new pgid for the children */
setsid();
fork_poller();
}