how to kill subprocess when Python process is killed?

M

mark.v.weber

I am writing a Python program that launches a subprocess (using
Popen).
I am reading stdout of the subprocess, doing some filtering, and
writing to
stdout of the 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; the user
wants the process and all subprocesses to go away in response
to a cntl-C

I'm new to python; solution must be for Python 2.5 (windows) to help
me.

Any help and/or pointers appreciated.
 
A

alex23

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.

You can register functions to run when the Python process ends by
using the atexit[1] module.

The following has been tested & works under Python 2.6 on Windows XP:

import atexit

def cleanup():
print 'stop the subprocess in here'

atexit.register(cleanup)

while True:
pass


[1]: http://docs.python.org/library/atexit.html
 
P

Piet van Oostrum

M> I am writing a Python program that launches a subprocess (using
M> Popen).
M> I am reading stdout of the subprocess, doing some filtering, and
M> writing to
M> stdout of the main process.
M> When I kill the main process (cntl-C) the subprocess keeps running.
M> How do I kill the subprocess too? The subprocess is likey to run a
M> long time.
M> Context:
M> I'm launching only one subprocess at a time, I'm filtering its stdout.
M> The user might decide to interrupt to try something else; the user
M> wants the process and all subprocesses to go away in response
M> to a cntl-C
M> I'm new to python; solution must be for Python 2.5 (windows) to help
M> me.
M> Any help and/or pointers appreciated.

When the parent dies, the child should die when it's writing on the
broken pipe. At least that's how it works in Unix systems. I don't know
about Windows, however.

To let the dying be fast you should make sure that stdout in the child
is unbuffered.
 
M

mark.v.weber

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

You can register functions to run when the Python process ends by
using the atexit[1] module.

The following has been tested & works under Python 2.6 on Windows XP:

    import atexit

    def cleanup():
        print 'stop thesubprocessin here'

    atexit.register(cleanup)

    while True:
        pass

[1]:http://docs.python.org/library/atexit.html

Works perfectly. Thanks!
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,756
Messages
2,569,535
Members
45,008
Latest member
obedient dusk

Latest Threads

Top