diff options
author | Matthias Wachs <wachs@net.in.tum.de> | 2010-06-29 15:39:42 +0000 |
---|---|---|
committer | Matthias Wachs <wachs@net.in.tum.de> | 2010-06-29 15:39:42 +0000 |
commit | b5b6ae8b070e20732ae2f6afdfc248b372242462 (patch) | |
tree | caf24ce35018caae3c5814d14309bf90387de590 /contrib | |
parent | 75ea0957000cec727be72b3bb9a4e70f1a63a114 (diff) |
Diffstat (limited to 'contrib')
-rw-r--r-- | contrib/Makefile.am | 6 | ||||
-rw-r--r-- | contrib/timeout_watchdog.c | 26 |
2 files changed, 19 insertions, 13 deletions
diff --git a/contrib/Makefile.am b/contrib/Makefile.am index f8e0d2f49..43348b309 100644 --- a/contrib/Makefile.am +++ b/contrib/Makefile.am @@ -1,3 +1,9 @@ +noinst_PROGRAMS = \ + timeout_watchdog + +timeout_watchdog_SOURCES = \ + timeout_watchdog.c + dist_pkgdata_DATA = \ gnunet-logo-color.png \ defaults.conf diff --git a/contrib/timeout_watchdog.c b/contrib/timeout_watchdog.c index 82bf11b0f..27b46f2b0 100644 --- a/contrib/timeout_watchdog.c +++ b/contrib/timeout_watchdog.c @@ -24,13 +24,13 @@ * @author Matthias Wachs */ -#include "signal.h" -#include "stdio.h" -#include "stdlib.h" +#include <sys/types.h> +#include <signal.h> +#include <stdio.h> +#include <stdlib.h> #include <unistd.h> #include <wait.h> -static int child_died; static pid_t child; static void sigchld_handler(int val) @@ -55,15 +55,13 @@ static void sigchld_handler(int val) static void sigint_handler(int val) { kill(0, val); - exit(1); + exit(val); } - int main(int argc, char *argv[]) { int timeout = 0; -int remain = 0; -int ret = 0; +pid_t gpid =0; if (argc < 3) { @@ -76,21 +74,22 @@ timeout = atoi(argv[1]); if (timeout == 0) timeout = 600; +/* with getpgid() it does not compile, but getpgrp is the BSD version and working */ +gpid = getpgrp(); -char ** arguments = &argv[3]; - -pid_t gpid = getpgid(0); signal(SIGCHLD, sigchld_handler); signal(SIGABRT, sigint_handler); -signal(SIGKILL, sigint_handler); +signal(SIGFPE, sigint_handler); signal(SIGILL, sigint_handler); -signal(SIGSEGV, 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); @@ -101,6 +100,7 @@ if (child > 0) kill(0,SIGABRT); exit(1); } +exit(1); } /* end of timeout_watchdog.c */ |