start-stop-daemon: create pidfile before parent exits, closes 8596

This removes DAEMON_DOUBLE_FORK flag from bb_daemonize_or_rexec(),
as SSD was the only user.

Also includes fix for -S: now works without -a and -x,
does not print pids
(compat with "start-stop-daemon (OpenRC) 0.34.11 (Gentoo Linux)").

function                                             old     new   delta
start_stop_daemon_main                              1018    1084     +66
add_interface                                         99     103      +4
fail_hunk                                            139     136      -3
bb_daemonize_or_rexec                                205     183     -22
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 2/2 up/down: 70/-25)             Total: 45 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko
2019-01-14 14:45:18 +01:00
parent b67d900395
commit 088fec36fe
4 changed files with 62 additions and 35 deletions

View File

@ -292,14 +292,14 @@ void FAST_FUNC bb_daemonize_or_rexec(int flags, char **argv)
dup2(fd, 0);
dup2(fd, 1);
dup2(fd, 2);
if (flags & DAEMON_DOUBLE_FORK) {
/* On Linux, session leader can acquire ctty
* unknowingly, by opening a tty.
* Prevent this: stop being a session leader.
*/
if (fork_or_rexec(argv))
_exit(EXIT_SUCCESS); /* parent */
}
// if (flags & DAEMON_DOUBLE_FORK) {
// /* On Linux, session leader can acquire ctty
// * unknowingly, by opening a tty.
// * Prevent this: stop being a session leader.
// */
// if (fork_or_rexec(argv))
// _exit(EXIT_SUCCESS); /* parent */
// }
}
while (fd > 2) {
close(fd--);