Книга: UNIX — универсальная среда программирования

3.8.54 timeout.c

3.8.54 timeout.c
/* timeout: set time limit on a process */
#include <stdio.h>
#include <signal.h>
int pid; /* child process id */
char *progname;
main(argc, argv)
 int argc;
 char *argv[];
{
 int sec = 10, status, onalarm();
 progname = argv[0];
 if (argc > 1 && argv[1][0] == '-') {
  sec = atoi(&argv[1][1]);
  argc--;
  argv++;
 }
 if (argc < 2)
  error("Usage: %s [-10] command", progname);
 if ((pid=fork()) == 0) {
  execvp(argv[1], &argv[1]);
  error("couldn't start %s", argv[1]);
 }
 signal(SIGALRM, onalarm);
 alarm(sec);
 if (wait(&status) == -1 || (status & 0177) != 0)
  error("%s killed", argv[1]);
 exit((status >> 8) & 0377);
}
onalarm() /* kill child when alarm arrives */
{
 kill(pid, SIGKILL);
}
#include "error.c"

Оглавление книги


Генерация: 0.114. Запросов К БД/Cache: 0 / 0
поделиться
Вверх Вниз