From 3a479c212dfdd51c9cb031a9a09138d24ab1ca97 Mon Sep 17 00:00:00 2001 From: Pau Espin Pedrol Date: Fri, 5 Apr 2019 19:47:40 +0200 Subject: processes: Fix kill of processes run under sudo sudo drops forwarding of signals sent by processes of the same process group, which means by default will drop signals from parent and children processes. By moving it to another group, we will later be able to kill it. Note: sudo documentation is wrong, since it states it only drops signals from children. See following link for more information: https://stackoverflow.com/questions/34337840/cant-terminate-a-sudo-process-created-with-python-in-ubuntu-15-10 Change-Id: I25990234aaa496c501ff45ad7f7fd549d6f188da --- src/osmo_gsm_tester/process.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/osmo_gsm_tester/process.py b/src/osmo_gsm_tester/process.py index 66ecae5..4b22d0c 100644 --- a/src/osmo_gsm_tester/process.py +++ b/src/osmo_gsm_tester/process.py @@ -157,16 +157,27 @@ class Process(log.Origin): return f def launch(self): + preexec_fn = None log.dbg('cd %r; %s %s' % ( os.path.abspath(str(self.run_dir)), ' '.join(['%s=%r'%(k,v) for k,v in self.popen_kwargs.get('env', {}).items()]), ' '.join(self.popen_args))) + if self.popen_args[0] == "sudo": + # sudo drops forwarding of signals sent by processes of the same + # process group, which means by default will drop signals from + # parent and children processes. By moving it to another group, we + # will later be able to kill it. + # Note: sudo documentation is wrong, since it states it only drops + # signals from children. + preexec_fn = os.setpgrp + self.process_obj = subprocess.Popen( self.popen_args, stdout=self.make_output_log('stdout'), stderr=self.make_output_log('stderr'), stdin=subprocess.PIPE, + preexec_fn=preexec_fn, shell=False, cwd=self.run_dir.path, **self.popen_kwargs) -- cgit v1.2.3