[Bug 212829] daemon(8) using -P swallows signals such as SIGHUP instead of propagating them

bugzilla-noreply at freebsd.org bugzilla-noreply at freebsd.org
Mon Sep 19 17:11:00 UTC 2016


https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=212829

            Bug ID: 212829
           Summary: daemon(8) using -P swallows signals such as SIGHUP
                    instead of propagating them
           Product: Base System
           Version: 10.3-RELEASE
          Hardware: Any
                OS: Any
            Status: New
          Severity: Affects Only Me
          Priority: ---
         Component: bin
          Assignee: freebsd-bugs at FreeBSD.org
          Reporter: dch at skunkwerks.at

When a service such as net-mgmt/riemann (java/clojure) is run under daemon(8),
`service reload` sends the SIGHUP to the parent daemon(8) process instead of
the managed child process.

command="/usr/sbin/daemon"
command_args="-f -c -r -P ${pidfile} \
    ${riemann_java_home}/bin/java \
    ${riemann_java_opts} ...

If the -p flag is used instead, which would provide the child's PID, then
`service restart` restarts the child, and not the parent daemon(8) process,
which then tries to restart *another* child. messy.

I can't see a way around this other than either not using daemon(8), or
alternatively teaching daemon(8) in -P mode to propagate SIGHUP to the child
process.


# notes from irc

21:20 <dch> is it possible for daemon(8) to pass on the SIGHUP it receives via
`service $name reload` to the child? it feels like this should be possible
somehow
21:24 <@cem> It would be possible
23:06 <RootWyrm> dch: thought it already did.. I might have a kludge that uses
child_pidfile somewhat handy.
01:56 <dch> RootWyrm: I thought it did too, I looked at
/usr.sbin/daemon/daemon.c and realise I am out of my depth here.
01:58 <dch> AFAICT the SIGHUP is only sent by service(8) to daemon, and daemon
doesn't propagate it further, when using `command_args="-f -c -r -P ${pidfile}
… `
01:59 <dch> I think I swapped from -p  to -P because using -p causes service(8)
to stop/start the child pid, and the daemon process restarts it behind your
back.
02:30 <RootWyrm> But yes, should depend on -p.. may need an -s flag to pass
signal to -p ?

-- 
You are receiving this mail because:
You are the assignee for the bug.


More information about the freebsd-bugs mailing list