Timeout für auszuführendes Programm

M

miketech

Routinier
Hi zusammen,

ich bin gerade dabei ein kleines Bash-Script zu schreiben. Dabei soll ein Programm gestartet werden und die Laufzeit des Programms beobachtet werden, d.h.:

In meinem Bash-Script starte ich ein anderes Programm. Nun möchte ich, dass die Ausführung des anderen Programms nach 10 Sekunden abgebrochen wird, wenn es immer noch läuft. D.h. ich benötige eine Art Timeout für exec. Wenn das Programm, das ich aufrufe kürzer als 10 Sekunden läuft ist alles prima. Wenn es jedoch länger als 10 Sekunden läuft möchte ich den Aufruf abbrechen und einen Fehlercode zurückbekommen.

Ich habe das bereits mit read versucht, aber das klappt noch nicht so ganz. Weil wenn das Programm keine Ausgabe macht, sondern einfach nur arbeitet scheint read damit nicht zu funktionieren. Hat jemand einen Tipp?

Gruß

Mike
 
Hmm, so ganz billig wäre es z.B.
Code:
#!/bin/sh
echo "Starte Anwendung"
( anwendung_bla_blubb_foo ) &
sleep 10
`ps -ef | grep anwendung_bla_blubb_foo | grep -v grep >>/dev/null`
if [ $? -eq "0" ]
then
 echo "Programm läuft, wird beendet."
 kill anwendung_bla_blubb_foo
fi
 
Hi,

danke für die Antwort. Jedoch kann es sein, dass die Anwendung auch noch parallel in einem anderen Prozess läuft. D.h. ich müsste sichergehen, dass es genau die ProzessID ist, die noch läuft. Kann ich das irgendwie abfragen?

Gruß

Mike
 
Hi,

danke für den Tipp. So funktioniert es zumindest schonmal. Allerdings hab ich nun das Problem, dass auch wenn mein Programm kürzer als 10 Sekunden läuft, ich auf jeden Fall 10 Sekunden warten muss. Ich möchte gerne nur 10 Sekunden warten, wenns gar nicht anders geht. Ansonsten soll er ruhig früher abbrechen.

Gruß

Mike
 
Schnell zusammengehackt, sollte aber funzen.

Code:
#!/bin/bash

DeinProgramm &
pid=$!

typeset -i i=0
while ps $pid >/dev/null
do
        sleep 1
        i=$i+1
        if [ $i -ge 10 ]
        then
                kill $pid
                break
        fi
done
 

Ähnliche Themen

while-Bedingung wird nicht (richtig) überprüft?

Pipefehler unter Solaris 10 X86

Problem mit Apache2 + MySQL Server

Zurück
Oben