You can do it using shell with a sequence like
<program>&
pid=$!
sleep $time_limit
if ps aux | grep $pid | grep -v grep > /dev/null
then
kill $pid
echo "Time limit exceeded"
fi
Here are two examples with and without reaching the time limit (using sleep 10
and sleep 3
as program, with a time limit of 5 seconds):
$ sleep 10& pid=$!; sleep 5; if ps aux | grep $pid | grep -v grep > /dev/null; then kill $pid; echo "Time limit exceeded"; fi
Time limit exceeded
$ sleep 3& pid=$!; sleep 5; if ps aux | grep $pid | grep -v grep > /dev/null; then kill $pid; echo "Time limit exceeded"; fi
$
The way it works is that the program is launched in background (with the &
after the program name). The pid ($!
) is stored in a variable named pid
. Then I wait $time_limit
using sleep and I check if the process with pid $pid
still runs. I use | grep -v grep
because the grep $pid
will also appear in the output of ps aux
.
If the process still runs, I kill it and display the message you wanted.
This can be included easily in a Makefile. You could also make it a shell script in your PATH
if you want to be able to use it in other context.
solved How to compile a program with limit time (5s), using MinGW-Gnu C++