#include #include #include #include #include #include #include #include void* worker(void *arg) { while (1) { pid_t p = fork(); if (-1 == p) { /* error */ perror("fork"); _exit(EXIT_FAILURE); } if (0 == p) { /* child */ _exit(42); } /* parent */ int stat_loc; int s = waitpid(p, &stat_loc, 0); if (-1 == s) { perror("waitpid"); _exit(EXIT_FAILURE); } } } int main(int argc, char **argv) { int pool_size = get_nprocs() * 4; if (argv[1]) pool_size = atoi(argv[1]); printf("Poolsize: %d\n", pool_size); pthread_t thread_id; int i; for (i = 0; i != pool_size; ++i) { if (pthread_create(&thread_id, NULL, worker, NULL) != 0) { perror("pthread_create"); _exit(EXIT_FAILURE); } } /* Prevent exiting: wait for last thread (forever) */ void *retval; pthread_join(thread_id, &retval); return 43; }