2017-10-14 1 views
0

Ich arbeite in tcsh (Seufzer) und ich würde gerne Szenario im Titel beschrieben implementieren. Ich habe unten teilweise eine gute Lösung gefunden. Es startet script_1.sh und beendet es nach einem Timeout. Das funktioniert gut, wenn script_1.sh hängen bleibt, aber wenn es vor dem Timeout beendet wird, muss script_2.sh immer noch warten, bevor es zu einem Timeout kommt und ich möchte script_2.sh sofort starten.Shell kill hängen Skript nach Timeout aber Abbrechen Timeout, wenn Skript nicht hängen

setenv timeout 2000 

/home/$USER/script_1.sh & 

sleep $timeout 
kill -9 $! 

/home/$USER/script_2.sh 

Antwort

0

Sie können in eine temporäre Datei schreiben, um diese script1 Signal gemacht wird:

setenv timeout 2000 

/home/$USER/script_1.sh && echo > /tmp/script1_done & 

sleep $timeout 

if (! -f /tmp/script1_done) then 
    kill -9 $! 
endif 
rm /tmp/script1_done 

/home/$USER/script_2.sh 

Beachten Sie, dass mit einem „echten“ Programmiersprache (ziemlich jede Sprache) diese Art von Sachen wird viel einfacher, zum Beispiel in Pythons subproccess Modul gibt es einfach eine timeout Einstellung :-)

+0

Diese impl Lösung, die überprüft, ob script_1 nach '$ timeout' Sekunden beendet ist, aber ich möchte den Timer abbrechen, wenn script_1 vor dem Timeout endet. Ich habe eine Lösung gefunden in Form von 'Timeout' Unix-Befehl erklärt [hier] (http://man7.org/linux/man-pages/man1/timeout.1.html). Ich habe einen Befehl innerhalb eines Skripts gekapselt, der im 'timeout'-Befehl hängen bleiben kann. – kreso