Repost: Can't sys.exit() from SIGTERM handler?
Jeff Epler
jepler at unpythonic.net
Mon Jan 5 20:37:08 EST 2004
If I had to guess, I'd bet you had a blanket exception handler
somewhere. sys.exit merely raises SystemExit, and if this exception
propogates all the way back up, Python treats it specially by exiting
instead of printing the exception's traceback.
:r term.py
import os, signal, time, sys, traceback
def sigterm(a, b):
print "sigterm"
sys.exit()
signal.signal(signal.SIGTERM, sigterm)
os.system("(sleep 1; kill %s) &" % os.getpid())
print "Sleeping (should be killed)"
try:
time.sleep(2)
except SystemExit:
traceback.print_exc()
raise
print "sleep finished (!?)"
:r!python -u term.py
Sleeping (should be killed)
sigterm
Traceback (most recent call last):
File "term.py", line 14, in ?
time.sleep(2)
File "term.py", line 5, in sigterm
sys.exit()
SystemExit
More information about the Python-list
mailing list