summaryrefslogtreecommitdiff
path: root/contrib
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2011-01-04 12:51:59 +0000
committerChristian Grothoff <christian@grothoff.org>2011-01-04 12:51:59 +0000
commitc2ace9d2e97b6f43cea8cad65157b26ee0123cce (patch)
treeddb26707901e63a057e19ec527b06daa044f84b7 /contrib
parent17d48a5d001e42727443faed87358e289bc6f0d3 (diff)
stuff
Diffstat (limited to 'contrib')
-rw-r--r--contrib/timeout_watchdog.c115
1 files changed, 60 insertions, 55 deletions
diff --git a/contrib/timeout_watchdog.c b/contrib/timeout_watchdog.c
index 9a1fc006d..b28e8e833 100644
--- a/contrib/timeout_watchdog.c
+++ b/contrib/timeout_watchdog.c
@@ -33,75 +33,80 @@
static pid_t child;
-static void sigchld_handler(int val)
+static void
+sigchld_handler (int val)
{
int status = 0;
int ret = 0;
-
+
waitpid (child, &status, 0);
- 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);
+ 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 */
-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);
+ 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 */