Is registered atexit handler inherited by spawned child processes?
atexit, multiprocessing, python
Solution
There isn't an API to do it in Python 2.5, but you can just:
import atexit
atexit._exithandlers = []
in your child processes - if you know you only have one exit handler installed, and that no other handlers are installed. However, be aware that some parts of the stdlib (e.g. `logging`) register `atexit` handlers. To avoid trampling on them, you could try:
my_handler_entries = [e for e in atexit._exithandlers if e[0] == my_handler_func]
for e in my_handler_entries:
atexit._exithandlers.remove(e)
where `my_handler_func` is the `atexit` handler you registered, and this should remove your entry without removing the others.
Problem
I am writing a daemon program using python 2.5. In the main process an exit handler is registered with `atexit` module, it seems that the handler gets called when each child process ends, which is not I expected. I noticed this behavior isn't mentioned in python `atexit` doc, anybody knows the issue? If this is how it should behave, how can I unregister the exit handler in children processes? There is a atexit.unregister in version 3.0, but I am using 2.5.