../../_images/Logo_OCW9.jpg
// 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]);
     }
}
../../_images/Licencia9.jpg