I like 2) the most. I do have access to the child. The child is a process started with multiprocessing.Process(function). How do I _not_ set an SID?
thanks, --mihai On Wed, Dec 7, 2011 at 2:50 PM, Dan Stromberg <drsali...@gmail.com> wrote: > On 12/7/11, Mihai Badoiu <mbad...@gmail.com> wrote: > > ok, so the code is something like > > #process A > > p = Process(...) > > p.daemon = 1 > > p.start() # starts process B > > ... > > > > If process A dies (say error, or ctrl-c), or finishes, then process B > also > > dies. But if process A is killed with the "kill" command, then process B > > soldiers on... > > > > Any idea on how to make process B die when process A gets killed by the > > "kill" command? > > 1) If all you care about is SIGTERM, SIGHUP and the like (and > specifically NOT SIGKILL), you could just install a signal handler > that catches any catchable signals you're interested in. Then the > signal either kills the children directly, or sets a flag that tells > the main process to do some killing shortly. Note that threads and > signal handlers don't mix very well - the combination tends to make > the main thread immune to control-C, whether you want it to be or not. > Also, signal handlers tend to complicate performing I/O, as you're > more likely to read short blocks. > > 2) If you need to handle SIGKILL gracefully, and you have access to > the code of the child process, you could make sure that the child > isn't setting a SID (?). ssh, I believe, likes to start a new SID, > making it immune to signals to the parent. Alternatively, you could > add something to the child process' main loop that polls the parent, > exiting if the parent no longer exists. > > 3) If you need to handle SIGKILL gracefully, and you don't have access > to the code of the child process, you could use a single extra process > that checks for the presense of the parent, and if it doesn't exist > any more, then kill the children before exiting itself. >
-- http://mail.python.org/mailman/listinfo/python-list