[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