#include #include #include #include #include #include #include #include #define COUNT 100 #define MAX_PROCS 1024 char wbuf[4096]; void run_test(char *base, int count) { char pbuf[1024]; int fd, i, j; sprintf(pbuf, "%s/file-%d", base, count); fd = open(pbuf, O_CREAT | O_TRUNC | O_WRONLY, 0644); if (fd < 0) { perror("open"); exit(1); } for (i = 0; i < COUNT; i++) { if (pwrite(fd, wbuf, 4096, 0) != 4096) { perror("pwrite"); exit(1); } for (j = 4095; j >= 1; j--) { if (ftruncate(fd, j) < 0) { perror("ftruncate"); exit(1); } } } } int main(int argc, char **argv) { int procs, i, j; pid_t pids[MAX_PROCS]; if (argc != 3) { fprintf(stderr, "Usage: stress-orphan \n"); return 1; } procs = strtol(argv[1], NULL, 10); if (procs > MAX_PROCS) { fprintf(stderr, "Too many processes!\n"); return 1; } for (i = 0; i < procs; i++) { pids[i] = fork(); if (pids[i] < 0) { perror("fork"); for (j = 0; j < i; j++) kill(pids[j], SIGKILL); return 1; } if (pids[i] == 0) { run_test(argv[2], i); exit(0); } } printf("Processes started.\n"); for (i = 0; i < procs; i++) waitpid(pids[i], NULL, 0); return 0; }