subprocess kill

Jean-Michel Pichavant jeanmichel at sequans.com
Mon Dec 7 05:04:06 EST 2009


luca72 wrote:
> On 5 Dic, 03:06, Carl Banks <pavlovevide... at gmail.com> wrote:
>   
>> On Dec 4, 3:44 pm, luca72 <lucabe... at libero.it> wrote:
>>
>>
>>
>>     
>>> On 5 Dic, 00:14, luca72 <lucabe... at libero.it> wrote:
>>>       
>>>> On 5 Dic, 00:03, luca72 <lucabe... at libero.it> wrote:
>>>>         
>>>>> On 4 Dic, 23:23, Mike Driscoll <kyoso... at gmail.com> wrote:
>>>>>           
>>>>>> On Dec 4, 3:50 pm, luca72 <lucabe... at libero.it> wrote:
>>>>>>             
>>>>>>> Hello i'm using subprocess in this way:
>>>>>>> self.luca = subprocess.Popen(['/usr/bin/
>>>>>>> dvbtune'+frase_sint],shell=True, stdout=self.f_s_l,stderr=self.f_s_e )
>>>>>>>               
>>>>>>> then i kill:
>>>>>>> self.luca.Kill()
>>>>>>>               
>>>>>>> but the process is still active and the file self.f_s_l increase it
>>>>>>> size because the process is not killed.
>>>>>>>               
>>>>>>> How i can kill the process?
>>>>>>> Regards
>>>>>>>               
>>>>>>> Luca
>>>>>>>               
>>>>>> Seehttp://lmgtfy.com/?q=python+kill+subprocess+linux
>>>>>>             
>>>>>> When I do that on my machine, the 2nd result has the answer:
>>>>>>             
>>>>>> http://stackoverflow.com/questions/1064335/in-python-2-5-how-do-i-kil...
>>>>>>             
>>>>>> -------------------
>>>>>> Mike Driscoll
>>>>>>             
>>>>>> Blog:  http://blog.pythonlibrary.org
>>>>>>             
>>>>> Hello Mike i have also test but they never kill the process the file
>>>>> (stdout=self.f_s_l) increase it's size, haveyou some idea.
>>>>> also if i close the program the process is still active.
>>>>>           
>>>>> Regards
>>>>>           
>>>>> Luca
>>>>>           
>>>> i'm able only to kill via shell like kill -9 process pid, Why?
>>>>         
>>> Now the only way to solve the problem is to call a c program that kill
>>> the process via subprocess in other case i can't close it, i have also
>>> try with
>>>       
>>> subprocess.Popen(['kill -9 dvbtune'] shell=True), but the process is
>>> still active
>>>       
>> This is not working because the kill command does not accept the name
>> of a program.  You have to give it a process id.
>>
>> As for your general question, we really can't answer it.  There a lot
>> of reasons a process might not die when you try to kill it: it could
>> be trapping and ignoring signals (which is rude but it happens), it
>> could be stuck in a critical section, the program might be threaded
>> and not handling signals well, the program might have forked itself
>> and the original process id has disappeared, etc.  We can't read your
>> mind or divine what's running on your computer, so we can't answer
>> your question.  We can only suggest things that might be wrong.  It's
>> up to you to investigate and/or dig deeper.
>>
>> Carl Banks
>>     
>
> The firs thing that i have tested is with the process id get by
> Popen.pid ,but it don't works.
> Thank

I'm no specialist of linux stuff but the google link suggests that child PID may not be killed when killing the parent PID.

When using shell=True, your process is started in a shell, meaning the 
PID of your subprocess is not self.luca.pid, self.luca.pid is the PID of 
the shell.

- You might try to kill the pid of your subprocess explicitly (you can't 
use self.luca.pid directly but you can filter the process list using 
this parentID)
- If the argument shell=True is not absolutely required, you may set it 
to false, self.luca.pid will then *be* the pid of your process

JM



More information about the Python-list mailing list