Programación concurrente en Linux

    // 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]);
         }
    }