def
[oweals/gnunet.git] / contrib / timeout_watchdog.c
index 27b46f2b03e503938c5468346767ccbc3f861192..b28e8e833b7bf380040a5e42392757a669c4a81e 100644 (file)
@@ -4,7 +4,7 @@
 
      GNUnet is free software; you can redistribute it and/or modify
      it under the terms of the GNU General Public License as published
 
      GNUnet is free software; you can redistribute it and/or modify
      it under the terms of the GNU General Public License as published
-     by the Free Software Foundation; either version 2, or (at your
+     by the Free Software Foundation; either version 3, or (at your
      option) any later version.
 
      GNUnet is distributed in the hope that it will be useful, but
      option) any later version.
 
      GNUnet is distributed in the hope that it will be useful, but
  */
 
 #include <sys/types.h>
  */
 
 #include <sys/types.h>
+#include <sys/wait.h>
 #include <signal.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <unistd.h>
 #include <signal.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <unistd.h>
-#include <wait.h>
 
 static pid_t child;
 
 
 static pid_t child;
 
-static void sigchld_handler(int val)
+static void
+sigchld_handler (int val)
 {
   int status = 0;
   int ret = 0;
 {
   int status = 0;
   int ret = 0;
-  
+
   waitpid (child, &status, 0);
   waitpid (child, &status, 0);
-  if (WIFEXITED(status) == 1)
-  {
-    ret = WEXITSTATUS(status);
-    printf("Test process exited with result %u\n", ret);
-  }
-  if (WIFSIGNALED(status) == 1)
-  {
-    printf("Test process was signaled %u\n", WTERMSIG(status));
-    ret = WTERMSIG(status);
-  }   
-  exit(ret);  
+  if (WIFEXITED (status) != 0)
+    {
+      ret = WEXITSTATUS (status);
+      printf ("Test process exited with result %u\n", ret);
+    }
+  if (WIFSIGNALED (status) != 0)
+    {
+      ret = WTERMSIG (status);
+      printf ("Test process was signaled %u\n", ret);
+    }
+  exit (ret);
 }
 
 }
 
-static void sigint_handler(int val)
-{ 
-  kill(0, val);
-  exit(val);
+static void
+sigint_handler (int val)
+{
+  kill (0, val);
+  exit (val);
 }
 
 }
 
-int main(int argc, char *argv[])
+int
+main (int argc, char *argv[])
 {
 {
-int timeout = 0;
-pid_t gpid =0;
+  int timeout = 0;
+  pid_t gpid = 0;
 
 
-if (argc < 3)
-{  
-  printf("arg 1: timeout in sec., arg 2: executable, arg<n> arguments\n");     
-  exit(1);
-}
+  if (argc < 3)
+    {
+      printf
+       ("arg 1: timeout in sec., arg 2: executable, arg<n> arguments\n");
+      exit (1);
+    }
 
 
-timeout = atoi(argv[1]);
+  timeout = atoi (argv[1]);
 
 
-if (timeout == 0)
-  timeout = 600;   
+  if (timeout == 0)
+    timeout = 600;
 
 /* with getpgid() it does not compile, but getpgrp is the BSD version and working */
 
 /* with getpgid() it does not compile, but getpgrp is the BSD version and working */
-gpid = getpgrp();
-
-signal(SIGCHLD, sigchld_handler);
-signal(SIGABRT, sigint_handler);
-signal(SIGFPE,  sigint_handler);
-signal(SIGILL,  sigint_handler);
-signal(SIGINT,  sigint_handler);
-signal(SIGSEGV, sigint_handler);
-signal(SIGTERM, sigint_handler);
-
-child = fork();
-if (child==0)
-{
-  /*  int setpgrp(pid_t pid, pid_t pgid); is not working on this machine*/
-   //setpgrp (0, pid_t gpid);
-   setpgid(0,gpid);
-   execvp(argv[2],&argv[2]);
-   exit(1);
-}
-if (child > 0)
-{
-  sleep(timeout);
-  kill(0,SIGABRT);
-  exit(1);
-}  
-exit(1);
+  gpid = getpgrp ();
+
+  signal (SIGCHLD, sigchld_handler);
+  signal (SIGABRT, sigint_handler);
+  signal (SIGFPE, sigint_handler);
+  signal (SIGILL, sigint_handler);
+  signal (SIGINT, sigint_handler);
+  signal (SIGSEGV, sigint_handler);
+  signal (SIGTERM, sigint_handler);
+
+  child = fork ();
+  if (child == 0)
+    {
+      /*  int setpgrp(pid_t pid, pid_t pgid); is not working on this machine */
+      //setpgrp (0, pid_t gpid);
+      setpgid (0, gpid);
+      execvp (argv[2], &argv[2]);
+      exit (1);
+    }
+  if (child > 0)
+    {
+      sleep (timeout);
+      printf ("Child processes were killed after timeout of %u seconds\n",
+             timeout);
+      kill (0, SIGTERM);
+      exit (1);
+    }
+  exit (1);
 }
 
 /* end of timeout_watchdog.c */
 }
 
 /* end of timeout_watchdog.c */