#include #include #include #include #include int main(int argc, char * argv[]) { pid_t child, pid; int status; time_t starttime, lasttime, nowtime; unsigned long int n_forks = 0; starttime = lasttime = time (NULL); while (1) { child = fork(); #define CHILD_EXIT 42 if (child == -1) { perror("fork"); exit(EXIT_FAILURE); } if (child == 0) _exit(CHILD_EXIT); pid = waitpid(child, &status, 0); if (pid == -1 || !WIFEXITED(status) || WEXITSTATUS(status) != CHILD_EXIT) { perror("waitpid"); exit(EXIT_FAILURE); } n_forks++; nowtime = time (NULL); if (lasttime != nowtime) { printf ("%u: %lu\n", (unsigned int) (nowtime - starttime), n_forks); n_forks = 0; lasttime = nowtime; } } return 0; }