/* CS 2SC3 / SE 2S03 testcase runtime limitation utility -- Pouya Larjani */ #include #include #include #include #include #include int main(int argc, char *argv[]) { pid_t child, ret; int stat, i; if (argc == 1) exit(0); child = fork(); if (child == -1) exit(-1); else if (child == 0) execvp(argv[1], &argv[1]); else { for (i=0; i<10; i++) { ret = waitpid(child, &stat, WNOHANG); if (ret == 0) sleep(1); else break; } if (ret == 0) ret = waitpid(child, &stat, WNOHANG); if (ret == 0) { kill(child, SIGTERM); sleep(1); ret = waitpid(child, &stat, WNOHANG); } if ((ret == 0) || !WIFEXITED(stat)) exit(-1); return WEXITSTATUS(stat); } return -1; }