how to make systemd wait for a process to die?

Lennart Poettering mzerqung at 0pointer.de
Mon Sep 19 17:28:49 UTC 2011


On Mon, 19.09.11 13:25, Juan Orti Alcaine (j.orti.alcaine at gmail.com) wrote:

> Hello, I'm making a systemd service file for gogoc, a program to create IPv6
> tunnels with Freenet6.net
> 
> The program gets the network configuration and uses a shell script for
> configuring the interface, and when receives the HUP signal, calls the shell
> script again for shutting down the tunnel, but it needs a few seconds for
> doing this.
> 
> What's the better way for doing this? at the moment, I do:
> 
> [Service]
> WorkingDirectory=/var/lib/gogoc
> Type=simple
> EnvironmentFile=-/etc/sysconfig/gogoc
> ExecStart=/usr/bin/gogoc -f /etc/gogoc/gogoc.conf $GOGOC_OPTS
> ExecStop=/bin/kill -s SIGHUP $MAINPID
> 
> it sends the HUP, but then it kills the daemon immediately, there's no time
> for shutting down the tunnel properly.
> Is correct to put a sleep? It looks awful
> ExecStop=/bin/kill -s SIGHUP $MAINPID; sleep 5

> What do you think?

ExecStop is supposed to synchronously shut down a service. It's the same
for SysV's "stop" verb. 

I must say I find it quite a poort choice of this software to use SIGHUP
for termination. They should use SIGSTOP for that, as the generally
accepted default meaning for SIGHUP for daemons is to reload
configuration.

Note that by default systemd sends SIGSTOP to all processes of a service
and waits for a while to ensure the service shuts down. You can
influence the signal sent via KillSignal=. See systemd.service(5) for
more information.

Lennart

-- 
Lennart Poettering - Red Hat, Inc.


More information about the devel mailing list