SIGTERM is the correct one. But usually INT has the same handler... usually.
mic 2012/11/8 Richard Baron Penman <richar...@gmail.com> > So far script has used SIGINT and not needed the SIGKILL backup. > What would be a better way to terminate a process than SIGINT? > > Zombie processes consume minimal resources, but are being reaped > eventually anyway so not stacking up. > > > On Fri, Nov 9, 2012 at 9:06 AM, Michele Comitini < > michele.comit...@gmail.com> wrote: > >> using SIGKILL is not a good way to end processes and zombies are evil not >> only in "Night of the Living >> Dead"<https://en.wikipedia.org/wiki/Night_of_the_Living_Dead> ;-) >> they consume resources. >> >> >> mic >> >> >> 2012/11/8 Richard Baron Penman <richar...@gmail.com> >> >>> thanks for advice, but already have a working solution. >>> >>> > It's still not clear why the scheduler does not fit your needs. >>> I do not need to schedule tasks. I just need to react to form >>> submissions so having the scheduler middleman is not necessary in this case. >>> >>> >>> >>> On Fri, Nov 9, 2012 at 12:59 AM, Michele Comitini < >>> michele.comit...@gmail.com> wrote: >>> >>>> It's still not clear why the scheduler does not fit your needs. Anyway >>>> what you want seems to need should be a *deamon*. >>>> You can launch it in the middle of the request/response cycle or from >>>> the scheduler it will detach from the parent (the launching) process and >>>> work in the background. >>>> >>>> pip install python-daemon >>>> >>>> http://pypi.python.org/pypi/python-daemon/ >>>> >>>> >>>> mic >>>> >>>> >>>> 2012/11/7 Richard Baron Penman <richar...@gmail.com> >>>> >>>>> OK, got a solution that has been working well for last few days now. >>>>> >>>>> I made 2 mistakes previously that caused me trouble: >>>>> >>>>> 1) The child processes are independent. I had used ctrl+c to kill >>>>> web2py, which was passed on to the child processes. >>>>> When kill -9 [web2py PID] was used the child processes continued fine. >>>>> >>>>> 2) The parent process can kill child processes but they became zombie >>>>> processes until the parent process dies. >>>>> Originally I was checking /proc/PID for process existence so seemed to >>>>> always exist. Now using the psutil package, which has some useful >>>>> cross platform features. Much better than parsing output of ps! >>>>> >>>>> >>>>> The scheduler was not helpful for this use case. >>>>> >>>>> Here are some functions I used in case they help others: >>>>> >>>>> >>>>> def exists(pid): >>>>> """Return whether the process exists""" >>>>> try: >>>>> p = psutil.Process(pid) >>>>> if p.status == psutil.STATUS_ZOMBIE: >>>>> return False # ignore zombie processes >>>>> else: >>>>> return True >>>>> except psutil.NoSuchProcess: >>>>> return False >>>>> >>>>> >>>>> def stop(pid): >>>>> """Try to kill this process, first with interrupt and then kill >>>>> signal >>>>> """ >>>>> success = True >>>>> try: >>>>> p = psutil.Process(pid) >>>>> p.terminate() >>>>> time.sleep(1) # if don't delay here a bit then exists() call >>>>> will usually fail - better way? >>>>> if exists(pid): >>>>> # was not able to terminate process so try kill >>>>> p.kill() >>>>> time.sleep(1) >>>>> if exists(pid): >>>>> success = False >>>>> except psutil.NoSuchProcess: >>>>> pass >>>>> return success >>>>> >>>>> -- >>>>> >>>>> >>>>> >>>>> >>>> -- >>>> >>>> >>>> >>>> >>> >>> -- >>> >>> >>> >>> >> >> -- >> >> >> >> > > -- > > > > --