supervise-daemon: use nanosleep() instead of sleep()

We will be using sigalrm in this process for health checking, and
sigalrm cannot be used with sleep() safely.
This commit is contained in:
William Hubbs 2018-10-06 12:51:04 -05:00
parent 7ee3e5b2d6
commit eca4357892

View File

@ -425,6 +425,7 @@ static void supervisor(char *exec, char **argv)
FILE *fp; FILE *fp;
int i; int i;
int nkilled; int nkilled;
struct timespec ts;
time_t respawn_now= 0; time_t respawn_now= 0;
time_t first_spawn= 0; time_t first_spawn= 0;
@ -497,7 +498,9 @@ static void supervisor(char *exec, char **argv)
if (nkilled > 0) if (nkilled > 0)
syslog(LOG_INFO, "killed %d processes", nkilled); syslog(LOG_INFO, "killed %d processes", nkilled);
} else { } else {
sleep(respawn_delay); ts.tv_sec = respawn_delay;
ts.tv_nsec = 0;
nanosleep(&ts, NULL);
if (respawn_max > 0 && respawn_period > 0) { if (respawn_max > 0 && respawn_period > 0) {
respawn_now = time(NULL); respawn_now = time(NULL);
if (first_spawn == 0) if (first_spawn == 0)