Every interfaces tries to launch the sage-cleaner. If it is already running, the newly-forked sage-cleaner quits immediately. But there is nobody reaping the child, so a zombie remains.
The standard solutions are either 1) waitpid in the parent e.g. whenever a new interface is created, 2) double fork, then the sage-cleaner would be the grandchild adopted by init 3) SIGCHLD signal handler, which complicates further fork()s of sage On Monday, February 22, 2016 at 8:27:55 PM UTC+1, William wrote: > > It depends on how Sage exits. If it exists properly then yes, they > are killed. But Sage could exit by being "kill -9'" or by segfaulting > or something else. Even then, it is important for the things Sage > spawned to be killed. IMHO an overall better design would be to have a monitor process for every spawned sub-process instead of sage-cleaner being responsible for processes that are not its direct children. The current solution is definitely racy if there is pid wraparound. -- You received this message because you are subscribed to the Google Groups "sage-support" group. To unsubscribe from this group and stop receiving emails from it, send an email to sage-support+unsubscr...@googlegroups.com. To post to this group, send email to sage-support@googlegroups.com. Visit this group at https://groups.google.com/group/sage-support. For more options, visit https://groups.google.com/d/optout.