Killing a process created with Python’s subprocess.Popen() [duplicate]

Posted on

Question :

Killing a process created with Python’s subprocess.Popen() [duplicate]

Here is my thought:

First of all, I created a process by using subprocess.Popen

Second, after certain amount of time, I tried to kill it by Popen.kill()

import subprocess
import os, signal
import time

proc1 = subprocess.Popen("kvm -hda /path/xp.img", shell = True)
time.sleep(2.0)
print 'proc1 = ', proc1.pid
subprocess.Popen.kill(proc1)

However, “proc1” still exists after Popen.kill().
Could any experts tell me how to solve this issue?
I appreciate your considerations.

Thanks to the comments from all experts, I did all you recommended, but result still remains the same.

proc1.kill() #it sill cannot kill the proc1

os.kill(proc1.pid, signal.SIGKILL) # either cannot kill the proc1

Thank you all the same.

And I am still waiting for your precious experience on solving this delicate issue.

Answer #1:

In your code it should be

proc1.kill()

Both kill or terminate are methods of the Popen object which sends the signal signal.SIGKILL to the process.

Answered By: pyfunc

Answer #2:

process.terminate() doesn’t work when using shell=True. This answer will help you.

Answered By: metanoia5

Answer #3:

Only use Popen kill method

process = subprocess.Popen(
    task.getExecutable(), 
    stdout=subprocess.PIPE, 
    stderr=subprocess.PIPE, 
    shell=True
)
process.kill()

Answer #4:

How about using os.kill? See the docs here: http://docs.python.org/library/os.html#os.kill

Answered By: Michael Patterson

Leave a Reply

Your email address will not be published.