shell scripting, how to auto-timeout?

Nerius Landys nlandys at gmail.com
Thu Jan 22 12:41:16 PST 2009


This is a shell scripting question, it is not specific to FreeBSD.

I am writing a script that I want to terminate after 1 second (because
it has the potential to infinite loop).  The script I have so far is:

#!/bin/sh
cd `dirname "$0"`
CLASSPATH=mapgen.jar
export CLASSPATH
/usr/local/bin/java PipeGenerator $*

The java process has the potential to run forever, and I want it to
run for at most 1 second then get killed.  I could write a parent
script that somehow gets the PID of the child script, but the problem
is that the java program writes to standard out, the result of the
program is written to standard out.  I also don't really want to share
a PID with a temporary file.

So what I might do is this:

/usr/local/bin/java PipeGenerator $* &
sleep 1
<kill the java command if not already killed>

Also with the above code I would be waiting for 1 second even if the
java process finished sooner.  But that is a penalty I'm willing to
pay, unless there is a more elegant solution.

How do I do this?


More information about the freebsd-questions mailing list