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

-- 



Reply via email to