[systemd-devel] extra SIGTERM
Michael D. Berger
m.d.berger at ieee.org
Fri Dec 30 19:22:59 PST 2011
> -----Original Message-----
> From: Lennart Poettering [mailto:lennart at poettering.net]
> Sent: Friday, December 30, 2011 11:13
> To: Michael D. Berger
> Cc: systemd-devel at lists.freedesktop.org
> Subject: Re: [systemd-devel] extra SIGTERM
>
> On Thu, 29.12.11 19:14, Michael D. Berger (m.d.berger at ieee.org) wrote:
>
> > myDaemon.service:
> >
> > [Unit]
> > Description=myDaemon
> > After=syslog.target network.target
> >
> > [Service]
> > PIDFile=/var/lock/subsys/myDaemon
> > Type=simple
> > ControlGroup=cpu:/
> > ExecStart=/usr/sbin/myDaemon --daemon
> > #ExecStop=/bin/kill -s SIGTERM $MAINPID
> >
> > [Install]
> > WantedBy=multi-user.target
> >
> > Using the service as shown, when I stop myDaemon, it gets
> one SIGTERM
> > .
> >
> > However, if I uncomment the ExecStop line, it gets two SIGTERMs in
> > rapid succession.
> >
> > Looks like a bug to me. What do you think?
>
> How else should this behave? Note that sending SIGTERM with
> kill() is asynchronous. So what happens is that your
> /bin/kill invocation enqueues SIGTERM, and then systemd will
> kill what is remaining after that, also with SIGTERM. Since
> there's no wait in between that means that two SIGTERMs are
> sent one right after the other (since the kernel might
> coalesce identical signals, if they aren't processed quickly
> you might still see them as a single signal in times.)
>
> What did you expect instead?
>
> Note that you can influence which signal is sent by systemd,
> and to which processes: with KillMode= and KillSignal=. You
> can also control whether a final SIGKILL shall be sent as
> last fallback if the service doesn't react to SIGTERM within
> a timeout. You can even turn off all sending of signals by
> systemd, with SendSIGKILL=no and KillMode=none.
>
> Or in other word: explicitly invoking /bin/kill in ExecStop=
> is almost always entirely redundant.
>
> So, as far as I can see everything behaves as it should?
>
> Lennart
>
> --
> Lennart Poettering - Red Hat, Inc.
>
I had assumed that ExecStop would replace the automatic delivery
of SIGTERM, so there would be only one SIGTERM. Your explanation
is clear.
Thanks,
Mike.
--
Michael D. Berger
m.d.berger at ieee.org
http://www.rosemike.net/
More information about the systemd-devel
mailing list