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.
diff --git a/src/haproxy.c b/src/haproxy.c
index 4101cef..e19d89a 100644
--- a/src/haproxy.c
+++ b/src/haproxy.c
@@ -2775,10 +2775,10 @@
 				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 @@
 
 					global.mode &= ~MODE_VERBOSE;
 					global.mode |= MODE_QUIET; /* ensure that we won't say anything from now */
-					setsid();
 				}
 
 				mworker_wait();
@@ -3005,7 +3004,8 @@
 			global.mode |= MODE_QUIET; /* ensure that we won't say anything from now */
 		}
 		pid = getpid(); /* update child's pid */
-		setsid();
+		if (!(global.mode & MODE_MWORKER)) /* in mworker mode we don't want a new pgid for the children */
+			setsid();
 		fork_poller();
 	}