tags:

views:

335

answers:

6

I want to be able to start a process and then be able to kill it afterwards

+7  A: 

Have a look at the subprocess module. You can also use low-level primitives like fork() via the os module.

Bastien Léonard
+3  A: 

A simple function that uses subprocess module:

def CMD(cmd) :
    p = subprocess.Popen(cmd, shell=True,
                         stdin=subprocess.PIPE,
                         stdout=subprocess.PIPE,
                         stderr=subprocess.PIPE,
                         close_fds=False)
    return (p.stdin, p.stdout, p.stderr)
Béres Botond
A: 

see docs for primitive fork() and modules subprocess, multiprocessing, multithreading

DrFalk3n
A: 

If you need to interact with the sub process at all, I recommend the pexpect module (link text). You can send input to the process, receive (or "expect") output in return, and you can close the process (with force=True to send SIGKILL).

dcrosta
+2  A: 

Here's a little python script that starts a process, checks if it is running, waits a while, kills it, waits for it to terminate, then checks again. It uses the 'kill' command. Version 2.6 of python subprocess has a kill function. This was written on 2.5.

import subprocess
import time

proc = subprocess.Popen(["sleep", "60"], shell=False)
print 'poll =', proc.poll(), '("None" means process not terminated yet)'
time.sleep(3)
subprocess.call(["kill", "-9", "%d" % proc.pid])
proc.wait()
print 'poll =', proc.poll()

The timed output shows that it was terminated after about 3 seconds, and not 60 as the call to sleep suggests.

$ time python prockill.py 
poll = None ("None" means process not terminated yet)
poll = -9

real    0m3.082s
user    0m0.055s
sys 0m0.029s
FeatureCreep