[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