.. include:: ../../my-header_2.txt

.. code-block:: c

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

.. include:: ../../my-footer_2.txt

