2016-04-26 6 views
0

ich das Timeout Befehl von GNU Coreutils läuft,ein Programm mit Timeout Lauf

gtimeout 600 Python myprogram.py

Nach dem manual,

Dauer ist ein Fließkommazahl, gefolgt von einer optionalen Einheit:

's' für Secon ds (Standardeinstellung) ‚m‘ für Minuten ‚h‘ Stunden ‚d‘ für Tage

Somit wird der "python myprogram.py Teil soll innerhalb von 600 Sekunden (10 Minuten) beendet. Zu meiner Überraschung ist der Befehl nach 1 Stunde tatsächlich abgelaufen. Warum?

+0

Vielleicht reagiert Ihr Python-Skript nicht richtig SigTerm? Versuchen Sie, "-s 9" hinzuzufügen, z. 'gtimeout -s 9 600 python myprogram.py', um stattdessen SIGKILL zu senden. – CherryDT

+0

Könntest du ein wenig näher ausführen? Ich werde deine Antwort wahrscheinlich akzeptieren. – zell

+1

Ich bin nicht sicher, ob dies die richtige Lösung in Ihrem Fall ist, Sie müssten es versuchen. Gerade jetzt war es eine Vermutung und ich dachte, es ist nicht genug für eine tatsächliche Antwort. Aber die Sache ist, dass es zwei Möglichkeiten gibt, einen Prozess zu beenden: das Signal "SIGTERM", das grundsätzlich einen Prozess zum Beenden auffordert (es kann sich weigern) und "SIGKILL", der nicht blockiert werden kann und den Prozess erzwingt vom Betriebssystem beendet werden. 'gtimeout' sendet normalerweise SIGTERM (wie' kill'). Sie können '-s' verwenden, um ein anderes Signal zu spezifizieren, wie' 9' (dasselbe wie 'KILL', der Name des Signals), wie Sie es mit' kill -9' tun würden. – CherryDT

Antwort

0

Es ist möglich, dass Ihr Programm SIGTERM ignoriert, das Signal, das von gtimeout verwendet wird, um "das Programm bitte abbrechen zu lassen".

Sie können gtimeout Verwendung SIGKILL stattdessen haben, die ignoriert oder blockiert nicht, indem man den Parameter hinzufügen -s 9 wie folgt aus:

gtimeout -s 9 python myprogram.py