Mark
Mark

Reputation:

kill subprocess when python process is killed?

I am writing a python program that lauches a subprocess (using Popen). I am reading stdout of the subprocess, doing some filtering, and writing to stdout of main process.

When I kill the main process (cntl-C) the subprocess keeps running. How do I kill the subprocess too? The subprocess is likey to run a long time.

Context: I'm launching only one subprocess at a time, I'm filtering its stdout. The user might decide to interrupt to try something else.

I'm new to python and I'm using windows, so please be gentle.

Upvotes: 6

Views: 4603

Answers (3)

Maksym Ganenko
Maksym Ganenko

Reputation: 1428

You can use python atexit module.

For example:

import atexit

def killSubprocess():
    mySubprocess.kill()

atexit.register(killSubprocess)

Upvotes: 0

pythonic metaphor
pythonic metaphor

Reputation: 10556

subprocess.Popen objects come with a kill and a terminate method (differs in which signal you send to the process).

signal.signal allows you install signal handlers, in which you can call the child's kill method.

Upvotes: 0

Jeremiah Jones
Jeremiah Jones

Reputation: 51

Windows doesn't have signals, so you can't use the signal module. However, you can still catch the KeyboardInterrupt exception when Ctrl-C is pressed.

Something like this should get you going:

import subprocess

try:
    child = subprocess.Popen(blah)
    child.wait() 

except KeyboardInterrupt:
    child.terminate()

Upvotes: 5

Related Questions