]> git.itanic.dy.fi Git - rrdd/blob - process.c
Initial comit
[rrdd] / process.c
1 #include "process.h"
2
3 int child_count = 0;
4
5 int run(const char *p, char *const argv[])
6 {
7         int child, error;
8         child = fork();
9         if (child < 0) {
10                 error = errno;
11                 fprintf(stderr, "fork() failed: %s\n", strerror(error));
12                 return -1;
13         }
14
15         if (child) {
16                 printf("Forked child %d\n", child);
17                 child_count++;
18                 return child;
19         }
20
21         execvp(p, argv);
22         error = errno;
23         printf("Failed to execv: %s\n", strerror(error));
24         exit(1);
25         return 0;
26 }
27
28 int harvest_zombies()
29 {
30         int status;
31         pid_t pid;
32
33         if (child_count == 0)
34                 return 0;
35
36         pid = wait(&status);
37         if (status == 0)
38                 printf("pid %d: terminated with exit code %d\n", pid, status);
39
40         child_count--;
41         return 1;
42 }
43