#include #include #include #include #include #include #define CHILDREN 7 int main(int argc, char *argv[]) { _Atomic int *sync = mmap(NULL, sizeof(int), PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANONYMOUS, -1, 0); if (sync == MAP_FAILED) return 1; *sync = 0; for (int i = 0; i < CHILDREN; i++) { pid_t pid = fork(); if (!pid) { // child while (*sync == 0) ; // wait the parent in order to call execl simultaneously execl(argv[1], argv[1], NULL); } else if (pid == -1) { *sync = 1; // release all children return 1; } } // parent *sync = 1; // start the program in all children simultaneously for (int i = 0; i < CHILDREN; i++) wait(NULL); return 0; }