systemd já suporta isso imediatamente, e é ativado por padrão .
A única coisa que você pode querer personalizar é o tempo limite, o que você pode fazer com TimeoutStopSec=
. Por exemplo:
[Service]
TimeoutStopSec=2
Agora, o systemd enviará um SIGTERM, esperará dois segundos para o serviço sair e, se não, enviará um SIGKILL.
Se o seu serviço não estiver ciente do systemd, talvez seja necessário fornecer o caminho para o arquivo PID com PIDFile=
.
Finalmente, você mencionou que seu daemon gera muitos processos. Nesse caso, talvez você queira definir KillMode=control-group
e systemd enviará sinais para todos os processos no cgroup.