#include #include #include #include #include #include #include #include #include #include #include int main(int argc, char *argv[]) { char buf[4096]; int res, x; srand(time(NULL)); switch (fork()) { case -1: printf("[parent] fork() failed: %s", strerror(errno)); break; default: printf("[parent] child created, making files...\n"); for (x = 0; x < 1000; x++) { snprintf(buf, sizeof(buf), "leak.%08x", (unsigned int)rand()); printf("open...");fflush(stdout); if ((res = open(buf, O_WRONLY|O_CREAT, 0666)) < 0) { perror("open()"); exit(1); } printf("done\n"); } printf("[parent] exiting -- whoops? I should've been killed...\n"); break; case 0: printf("[child] sleeping 1s\n"); sleep(1); printf("[child] killing parent\n"); if (kill(getppid(), SIGINT) < 0) printf("[child] ...eh? failed to kill parent: %s\n", strerror(errno)); printf("[child] exiting\n"); break; } return 0; }