From: Daniel Henrique Barboza <danielhb(a)linux.vnet.ibm.com>
As described in
https://github.com/kimchi-project/kimchi/issues/326,
run_command does not handle blocking process with timeout.
This patch fixes the bug, killing all children process of the process
created by Popen() call before executing kill() in the parent
process, making the timeout timer working as intended.
Please refer to the commit message of the patch for further details.
Using the same example described in the github bug entry to
demonstrate the fix:
$ sudo PYTHONPATH=src python
Python 2.7.5 (default, Nov 12 2013, 16:18:42)
[GCC 4.8.2 20131017 (Red Hat 4.8.2-1)] on linux2
Type "help", "copyright", "credits" or "license"
for more information.
>> from kimchi.utils import run_command
>> mount = ['mount', 'localhost:/var/nfs',
'/home/danielhb/nfs_test/']
>> run_command(mount, 7)
subprocess is killed by signal.SIGKILL for timeout 7
seconds
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/danielhb/kimchi/kimchi-upstream/src/kimchi/utils.py", line 181, in
run_command
raise TimeoutExpired("KCHUTILS0002E", msg_args)
kimchi.exception.TimeoutExpired: KCHUTILS0002E: Timeout while running command
'['mount', 'localhost:/var/nfs',
'/home/danielhb/nfs_test/']' after 7 seconds
ps output:
---- right after run_command started ----
[danielhb@tirion ~]$ ps axf | grep mount
16664 pts/3 S+ 0:00 | | \_ grep --color=auto mount
16660 pts/4 S+ 0:00 | \_ mount localhost:/var/nfs
/home/danielhb/nfs_test/
16662 pts/4 D+ 0:00 | \_ /sbin/mount.nfs localhost:/var/nfs
/home/danielhb/nfs_test -o rw
[danielhb@tirion ~]$
---- after the timeout of 7 seconds ----
[danielhb@tirion ~]$ ps axf | grep mount
16696 pts/3 S+ 0:00 | | \_ grep --color=auto mount
*** BLURB HERE ***
Daniel Henrique Barboza (1):
Github bug #326: run_command: killing all children processes
src/kimchi/utils.py | 9 +++++++++
1 file changed, 9 insertions(+)
--
1.8.3.1