60.11.1. Omezení doby běhu programu

Bash sám obsahuje příkaz ulimit kterým se dá omezit množstí procesorového času spotřebovaného programem.

…
(
    ulimit -t 300               # 5 minut
    program parametry
)

Jen připomínám že se jedná o omezení procesorového času, tedy sčasu kdy je programu přidělen procesor. Nejedná se tedy o omzení celkové doby běhu programu. Toto omezení musíme provést jinak.

#!/bin/bash
…
# Killing process with all it's children.

function killtree() {
    local -r parent=$1
    local -r children=$(pgrep -P $parent)
    kill -s KILL $parent
    for child in $children; do
	killtree $child
    done
} #killtree()

(
    program parametry
)&
program_pid=$!

# Spawn the guardian.  Guardian will watch the program and kill it if
# it runs too long.
(
    sleep 20m
    # If we are there, program runs out of time.  So kill it.
    killtree $program_pid
)&
guardian_pid=$!

# Wait for the program or guardian to end.
wait $program_pid
program_status=$?

if [[ $program_status == 137 ]]; then
    echo "Program killed because it runs out of time."
    wait $guardian_pid
else
    echo "Program status is $program_status."
    killtree $guardian_pid
fi
…