Script terminiert nicht
Verfasst: Donnerstag 10. Februar 2011, 09:43
Hallo,
habe folgendes Problem.
Mein Vorgängerpraktikant sollte damals ein Backupscript schreiben. Ist alles ganz "toll" und so, nur terminiert es nicht.
Wenn ich es mittels "./clientbackup.py" aufrufe, terminiert es ohne Probleme.
Jedoch bei "python clientbackup.py", mag das Script nicht zu ende laufen.
Nach "tausenden" print-Ausgaben habe ich herausgefunden, dass es am os._exit(0) lag (mit dem ich die Kindsprozesse beenden wollte).
Nachdem ich os._exit(0) in os.EX_OK geändert habe, lief das Script ein Stück weiter und blieb bei sys.exit(0) hängen.
Grob aufgebaut ist das Script wie folgt:
Folgendes habe ich noch ausprobiert:
* sys.exit(0) hinter die try-Anweisung -> kein Unterschied
* zusätzlich noch ein except SystemExit, e: sys.exit(e) -> kein Unterschied
* mit python -v ausgeführt -> cleanup main läuft durch
-> bei cleanup sys bleibt's hängen
# cleanup sys
# cleanup __builtin__
# cleanup ints: 39 unfreed ints in 4 out of 19 blocks
# cleanup floats: 30 unfreed floats in 1 out of 3 blocks
Weitere Infos:
python -V
Python 2.4.3
cat /etc/redhat-release
Red Hat Enterprise Linux Server release 5.6 (Tikanga)
Wäre echt nett, wenn mir jemand weiterhelfen könnte.
Grüße lill
habe folgendes Problem.
Mein Vorgängerpraktikant sollte damals ein Backupscript schreiben. Ist alles ganz "toll" und so, nur terminiert es nicht.
Wenn ich es mittels "./clientbackup.py" aufrufe, terminiert es ohne Probleme.
Jedoch bei "python clientbackup.py", mag das Script nicht zu ende laufen.
Nach "tausenden" print-Ausgaben habe ich herausgefunden, dass es am os._exit(0) lag (mit dem ich die Kindsprozesse beenden wollte).
Nachdem ich os._exit(0) in os.EX_OK geändert habe, lief das Script ein Stück weiter und blieb bei sys.exit(0) hängen.
Grob aufgebaut ist das Script wie folgt:
Code: Alles auswählen
import os, sys
def main():
try:
...
pid = os.fork()
if pid == 0:
...
os.EX_OK
else:
...
...
print "bis hierher geht alles"
sys.exit(0)
except KeyError:
...
except KeyboardInterrupt:
...
sys.exit(1)
if __name__ == "__main__":
main()
* sys.exit(0) hinter die try-Anweisung -> kein Unterschied
* zusätzlich noch ein except SystemExit, e: sys.exit(e) -> kein Unterschied
* mit python -v ausgeführt -> cleanup main läuft durch
-> bei cleanup sys bleibt's hängen
# cleanup sys
# cleanup __builtin__
# cleanup ints: 39 unfreed ints in 4 out of 19 blocks
# cleanup floats: 30 unfreed floats in 1 out of 3 blocks
Weitere Infos:
python -V
Python 2.4.3
cat /etc/redhat-release
Red Hat Enterprise Linux Server release 5.6 (Tikanga)
Wäre echt nett, wenn mir jemand weiterhelfen könnte.
Grüße lill