From e68a29c15e5f1050a19b399f86ff5caf5d1d77f0 Mon Sep 17 00:00:00 2001 From: "C. McEnroe" Date: Fri, 14 Aug 2020 18:11:14 -0400 Subject: Implement serviceSignal, serviceStop, serviceRestart --- service.c | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) (limited to 'service.c') diff --git a/service.c b/service.c index ef4834a..290372d 100644 --- a/service.c +++ b/service.c @@ -19,6 +19,8 @@ #include #include #include +#include +#include #include #include #include @@ -108,7 +110,7 @@ err: } void serviceStart(struct Service *service) { - if (service->state == Start) return; + if (service->state != Stop) return; if (service->intent == Start) { struct timespec backoff = service->restartInterval; @@ -164,3 +166,28 @@ void serviceStart(struct Service *service) { ); err(StopExit, "%s", _PATH_BSHELL); } + +void serviceSignal(struct Service *service, int signal) { + if (service->state != Start) return; + int error = kill(service->pid, signal); + if (error) { + syslog( + LOG_ERR, "signal %s %s[%ju]: %m", + sys_signame[signal], service->name, (uintmax_t)service->pid + ); + } +} + +void serviceStop(struct Service *service) { + service->intent = Stop; + serviceSignal(service, SIGTERM); +} + +void serviceRestart(struct Service *service) { + if (service->state == Start) { + service->intent = Restart; + serviceSignal(service, SIGTERM); + } else { + serviceStart(service); + } +} -- cgit 1.4.1