I have a badly coded infinite looping program that I want to run on the command line - but not forever. I want to use ulimit so if it loops forever, it gets cut off.

I'm trying:

$> bash -c "ulimit -t 1; java myinfloopprogram"

but it's like nothing is happening. What's going on, is my commandline command wrong? myinfloopprogram runs just fine.

I'm running a terminal and the version is Ubuntu 9.10 .

link|improve this question
Unbuntu? Is that the anti-Ubuntu? :) – Andrew H Jan 25 '10 at 22:17
It's not, like, sitting there for a second and then dying is it? Cause I think I might know what the problem is in that case ;-) – Matt Simmons Jan 25 '10 at 22:47
feedback

3 Answers

up vote 6 down vote accepted

Is the looping program actually using CPU?

-t is for CPU time, not wall clock time, so if your program is not actually using any CPU time it won't be killed.

link|improve this answer
This is EXACTLY what it was, about two minutes of running = 1 second of CPU time for this program. Thanks! – rlb.usa Jan 25 '10 at 23:28
feedback

ulimit is probably not what you need. You need some sort of bash timeout feature. There's nothing built into bash, but there are a few scripts floating around to do this. eg http://stackoverflow.com/questions/687948/timeout-a-command-in-bash-without-unnecessary-delay

link|improve this answer
feedback

Maybe try something like this instead:

java myinfloopprogram &
pid=$!
for i in $(seq 1 60); do
    kill -0 $pid >/dev/null || break
    sleep 1
done
kill -0 $pid >/dev/null || kill -TERM $pid
link|improve this answer
feedback

Your Answer

 
or
required, but never shown

Not the answer you're looking for? Browse other questions tagged or ask your own question.