#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include void execute_one() { fprintf(stderr, "unshare start\n"); unshare(CLONE_NEWNET); fprintf(stderr, "unshare end\n"); exit(0); } void loop() { for (;;) { int pid = fork(); if (pid == 0) { execute_one(); } int status = 0; while (waitpid(-1, &status, __WALL) != pid) { } } } int main(int argc, char **argv) { if (argc != 2) { printf("Usage: %s \n", argv[0]); exit(1); } int i; for (i = 0; i < atoi(argv[1]); i++) { int pid = fork(); if (pid == 0) { loop(); } } sleep(1000000); return 0; }