[linux] timeout v scripte

Jan 'judas' Tomka jan.tomka na stonline.sk
Sobota Říjen 27 16:22:24 CEST 2001


On Fri, Oct 26, 2001 at 11:17:39AM +0200, Miro Bobovsky wrote:
> nemate niekto udelatko .. 
> (raz som mal ale kdesi som zapotrosil)
> do scriptov aby som vedel v scripte niektore pazase
> (resp zavolane programy/scripty) ohranicit nejakym timeoutom ...

Cafes,

toto spusti program v pozadi a kazdych 200 milisekund cekne, ci este
bezi. Po uplynuti daneho casu mu posle TERM a potom KILL.

function timeout() {
        local PERIOD=200
        local TO=$(( $1 * 1000 ))
        shift
        eval "$* &"
        local PID=$!

        while (( $TO > 0 )); do
                if ! ps $PID &>/dev/null; then
                        exit
                fi
                usleep $PERIOD
                TO=$(( $TO - $PERIOD ))
        done

        if ps $PID &>/dev/null; then
                kill -TERM $PID &>/dev/null
        fi

        if ps $PID &>/dev/null; then
                kill -KILL $PID &>/dev/null
        fi
 }

Prikaz, ktory chces, aby bezal najviac 10 sekund potom spustis takto:

timeout 10 ls -l /usr/share

Je to urobene ako funkcia, ktora sa vrati najneskor po timeoute. Ak
chces aj tuto spustit v pozadi (a prejst hned na dalsi prikaz), tak ju
volaj

(timeout 10 ls -l /usr/share) &
next_cmd

Velmi som to netestoval, ale time mi vyhadzal zaujimave cisla, takze, ak
chces aby to bolo co najefektivnejsie, tak sa pohraj s hodnotou $PERIOD,
alebo usleep nahrad sleep a cekuj menej casto...

	judas




Další informace o konferenci linux