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

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to