killing children spawned by pexpect

loorthu loorthu at yahoo.com
Mon May 19 20:08:53 EDT 2008


I am noticing that pexpect kills any child that it is spawned when the
parent is terminated using SIGINT (e.g Ctrl-C on the shell), but not
when it is killed by SIGKILL (e.g 'kill -9' on the parent process).
Here is a quick demo (tried on Linux 2.6.9 kernel):

#!/usr/local/bin/python


import pexpect, re


cmd = “<any  time consuming shell command here>”


child = pexpect.spawn(cmd)

cpl = child.compile_pattern_list([pexpect.EOF, re.compile("(.*?)\r
\n")])

while True:

    r = child.expect_list(cpl)

    if r == 0: break

    line = child.match.group(1)

    print line

child.close()

print 'Exit ',  child.exitstatus



Now, if I kill the python process using Ctrl-C (SIGINT), it kills the
child process spawned as well. But if it is killed by SIGKILL (by
doing a ‘kill -9’), the parent python exits, but the child goes on…
What is the best way to ensure that all children are killed when the
parent who spawned them terminates?



Thanks,

Cottalango




More information about the Python-list mailing list