// Un ejemplo de vigilante usando señales.
// No siempre funciona porque el programa podría ignorar la señal.
///////////////////////////////////////////////////////////////////
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>
#include <signal.h>
int main (int argc, const char * argv[]) {
int i, id;
if (argc != 3) {
fprintf(stderr, "Uso: %s timeout programa\n", argv[0]);
exit(1);
}
switch (fork()) {
case -1:
perror("fork");
exit(1);
case 0:
alarm(atoi(argv[1]));
if (execlp(argv[2], argv[2], NULL) == -1) {
fprintf(stderr, "El programa %s no se ha podido ejecutar\n", argv[2]);
exit(1);
}
}
if ((id=wait(NULL)) != -1) {
fprintf(stderr, "\nTerminado %i %s\n", id, argv[2]);
}
}