[llvm-commits] CVS: llvm-test/TimedExec.sh RunSafely.sh
Evan Cheng
evan.cheng at apple.com
Wed Jun 7 11:57:48 PDT 2006
Changes in directory llvm-test:
TimedExec.sh added (r1.1)
RunSafely.sh updated: 1.19 -> 1.20
---
Log message:
Fork a watch dog process that sleeps for a specified period of time and then
wakes up and kill the parent process. This works for targets where ulimit -t
is not reliable.
---
Diffs of the changes: (+45 -1)
RunSafely.sh | 8 +++++++-
TimedExec.sh | 38 ++++++++++++++++++++++++++++++++++++++
2 files changed, 45 insertions(+), 1 deletion(-)
Index: llvm-test/TimedExec.sh
diff -c /dev/null llvm-test/TimedExec.sh:1.1
*** /dev/null Wed Jun 7 13:57:46 2006
--- llvm-test/TimedExec.sh Wed Jun 7 13:57:36 2006
***************
*** 0 ****
--- 1,38 ----
+ #!/bin/sh
+ #
+ # Program: TimedExec.sh
+ #
+ # Synopsis: This script is a watchdog wrapper. It runs the specified program
+ # but times out if it does not complete in the allocated time frame.
+ # Syntax: ./TimedExec.sh <timeout> <program> <args...>
+ #
+
+ if [ $# -lt 2 ]; then
+ echo "./TimedExec.sh <timeout> <program> <args...>"
+ exit 1
+ fi
+
+ PARENT=""
+ if [ "$1" == "-p" ]; then
+ PARENT=$2; shift; shift;
+ fi
+
+ TIMEOUT=$1
+ PROGRAM=$2
+ shift
+
+ if [ -z "$PARENT" ]; then
+ # Start a watchdog process
+ $0 -p $$ $TIMEOUT $PROGRAM $* &
+ WATCHDOG="$!"
+ exec "$@"
+ # I am done first. kill the watch dog.
+ kill $WATCHDOG && (sleep 2; kill -1 $WATCHDOG) && (sleep 2; kill -9 $WATCHDOG)
+ else
+ # Sleep for a specified time then wake up to kill the parent process.
+ exec > /dev/null 2>&1
+ sleep $TIMEOUT
+ kill $PARENT && (sleep 2; kill -1 $PARENT) && (sleep 2; kill -9 $PARENT)
+ fi
+
+ exit 0
Index: llvm-test/RunSafely.sh
diff -u llvm-test/RunSafely.sh:1.19 llvm-test/RunSafely.sh:1.20
--- llvm-test/RunSafely.sh:1.19 Tue Aug 2 17:04:00 2005
+++ llvm-test/RunSafely.sh Wed Jun 7 13:57:36 2006
@@ -13,6 +13,12 @@
#
# Syntax: ./RunSafely.sh <ulimit> <stdinfile> <stdoutfile> <program> <args...>
#
+if [ $# -lt 4 ]; then
+ echo "./RunSafely.sh <timeout> <stdinfile> <stdoutfile> <program> <args...>"
+ exit 1
+fi
+
+DIR=${0%%`basename $0`}
ULIMIT=$1
INFILE=$2
OUTFILE=$3
@@ -51,7 +57,7 @@
# we tell time to launch a shell which in turn executes $PROGRAM with the
# necessary I/O redirection.
#
-( time -p sh -c "$PROGRAM $* > $OUTFILE 2>&1 < $INFILE" ) 2>&1 | awk -- '\
+( time -p sh -c "${DIR}TimedExec.sh $ULIMIT $PROGRAM $* > $OUTFILE 2>&1 < $INFILE" ) 2>&1 | awk -- '\
BEGIN { cpu = 0.0; }
/^user/ { cpu += $2; print }
/^sys/ { cpu += $2; print }
More information about the llvm-commits
mailing list