linuxnewbie: clean handling of SIGTERM
randy at spoke.net
Sat Feb 3 22:02:56 CET 2001
This is hopefully a simple "everybody has done that" kind of question, but
my Linux (unix) experience is sort of lacking.
I have a daemon that runs a loop, waiting for work. When a request arrives,
it processes the request, and goes back into the loop.
Now I want to check for shutdown on each iteration of the loop. I thought I
could register a handler for SIGTERM, and simply set a variable to tell my
loop to terminate:
_shutdown = 0
def sigterm(sig, frame):
_shutdown = 1
while not _shutdown:
request = get_request() # returns None if _shutdown gets set (select
if request is not None:
The problem is that I get various exceptions when the signal is raised
(EINTR, but in various guises depending on the code that's running). It
seems to me I could fix this if I could use reliable (BSD) signals from
python, but I don't see a way to do that.
Otherwise, I'll have to trap each and every EINTR derived exception, which
will mean copying a lot of library code (generally, a big hairy mess).
Is there a better way?
P.S. My system does recover from a forced shutdown, but I would like to
complete any running requests before shutting down.
More information about the Python-list