/* * set time limit on a process * * Yunliang Yu * * time ./a.out -10 ./a.out -50 sleep 56 * */ #include #include int pid; /* child process id */ char *progname; void onalarm(int s); main(int argc,char** argv) { int sec=5,status,atoi(); progname=argv[0]; if (argc>1 && argv[1][0] == '-') { sec=atoi(&argv[1][1]); argc--; argv++; } if (argc<2) { fprintf(stderr,"Usage: %s [-5(seconds)] command args\n",progname); exit(1); } if ((pid=fork())==0) { execvp(argv[1],&argv[1]); fprintf(stderr,"couldn't start %s\n",argv[1]); exit(1); } signal(SIGALRM, onalarm); alarm(sec); if (wait(&status) == -1 || (status & 0177) != 0) { exit(1); } exit(1); } void onalarm(int s) { kill(/* 0 */ pid, SIGKILL); /* process group of the current process? */ }