mirror of
https://github.com/pygos/init.git
synced 2024-12-22 15:20:49 +01:00
Remove pid fron cron serives, reap children in signal handler
Signed-off-by: David Oberhollenzer <david.oberhollenzer@tele2.at>
This commit is contained in:
parent
a191a7cc18
commit
e171f88865
4 changed files with 9 additions and 16 deletions
18
crond/main.c
18
crond/main.c
|
@ -79,6 +79,8 @@ static void runjobs(void)
|
|||
|
||||
static void sighandler(int signo)
|
||||
{
|
||||
pid_t pid;
|
||||
|
||||
switch (signo) {
|
||||
case SIGINT:
|
||||
case SIGTERM:
|
||||
|
@ -87,6 +89,10 @@ static void sighandler(int signo)
|
|||
case SIGHUP:
|
||||
rescan = 1;
|
||||
break;
|
||||
case SIGCHLD:
|
||||
while ((pid = waitpid(-1, NULL, WNOHANG)) != -1)
|
||||
;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -94,15 +100,14 @@ int main(void)
|
|||
{
|
||||
struct timespec stime;
|
||||
struct sigaction act;
|
||||
crontab_t *t;
|
||||
int timeout;
|
||||
pid_t pid;
|
||||
|
||||
memset(&act, 0, sizeof(act));
|
||||
act.sa_handler = sighandler;
|
||||
sigaction(SIGINT, &act, NULL);
|
||||
sigaction(SIGTERM, &act, NULL);
|
||||
sigaction(SIGHUP, &act, NULL);
|
||||
sigaction(SIGCHLD, &act, NULL);
|
||||
|
||||
while (run) {
|
||||
if (rescan == 1) {
|
||||
|
@ -124,15 +129,6 @@ int main(void)
|
|||
break;
|
||||
}
|
||||
}
|
||||
|
||||
while ((pid = waitpid(-1, NULL, WNOHANG)) != -1) {
|
||||
for (t = jobs; t != NULL; t = t->next) {
|
||||
if (t->pid == pid) {
|
||||
t->pid = -1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return EXIT_SUCCESS;
|
||||
|
|
|
@ -33,10 +33,8 @@ int runjob(crontab_t *tab)
|
|||
return -1;
|
||||
}
|
||||
|
||||
if (pid != 0) {
|
||||
tab->pid = pid;
|
||||
if (pid != 0)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* XXX: inside the child process */
|
||||
memset(&act, 0, sizeof(act));
|
||||
|
@ -44,6 +42,7 @@ int runjob(crontab_t *tab)
|
|||
sigaction(SIGINT, &act, NULL);
|
||||
sigaction(SIGTERM, &act, NULL);
|
||||
sigaction(SIGHUP, &act, NULL);
|
||||
sigaction(SIGCHLD, &act, NULL);
|
||||
|
||||
if (setup_tty(tab->ctty, tab->tty_truncate))
|
||||
exit(EXIT_FAILURE);
|
||||
|
|
|
@ -489,7 +489,6 @@ crontab_t *rdcron(int dirfd, const char *filename)
|
|||
goto out;
|
||||
}
|
||||
|
||||
cron->pid = -1;
|
||||
cron->minute = 0xFFFFFFFFFFFFFFFFUL;
|
||||
cron->hour = 0xFFFFFFFF;
|
||||
cron->dayofmonth = 0xFFFFFFFF;
|
||||
|
|
|
@ -32,7 +32,6 @@ typedef struct crontab_t {
|
|||
|
||||
uid_t uid;
|
||||
gid_t gid;
|
||||
pid_t pid;
|
||||
|
||||
uint64_t minute;
|
||||
uint32_t hour;
|
||||
|
|
Loading…
Reference in a new issue