how to make systemd wait for a process to die?

Lennart Poettering mzerqung at
Mon Sep 19 17:28:49 UTC 2011

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

> Hello, I'm making a systemd service file for gogoc, a program to create IPv6
> tunnels with
> 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

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 Poettering - Red Hat, Inc.

More information about the devel mailing list