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
>>>
>>> --
>>>
>>>
>>>
>>>
>>  --
>>
>>
>>
>>
>
>  --
>
>
>
>

-- 



Reply via email to