#include "process.h" int child_count = 0; int run(const char *p, char *const argv[]) { int child, error; child = fork(); if (child < 0) { error = errno; fprintf(stderr, "fork() failed: %s\n", strerror(error)); return -1; } if (child) { printf("Forked child %d\n", child); child_count++; return child; } execvp(p, argv); error = errno; printf("Failed to execv: %s\n", strerror(error)); exit(1); return 0; } int harvest_zombies() { int status; pid_t pid; if (child_count == 0) return 0; pid = wait(&status); if (status == 0) printf("pid %d: terminated with exit code %d\n", pid, status); child_count--; return 1; }