You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ariatosca.apache.org by mx...@apache.org on 2017/06/27 08:53:44 UTC
incubator-ariatosca git commit: removed shell=True
Repository: incubator-ariatosca
Updated Branches:
refs/heads/ARIA-285-Cancel-execution-may-leave-running-processes 3d5efc43f -> 037106396
removed shell=True
Project: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/commit/03710639
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/tree/03710639
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/diff/03710639
Branch: refs/heads/ARIA-285-Cancel-execution-may-leave-running-processes
Commit: 03710639644503642badc9ec570c9926477b70c1
Parents: 3d5efc4
Author: max-orlov <ma...@gigaspaces.com>
Authored: Tue Jun 27 11:53:40 2017 +0300
Committer: max-orlov <ma...@gigaspaces.com>
Committed: Tue Jun 27 11:53:40 2017 +0300
----------------------------------------------------------------------
aria/orchestrator/workflows/executor/process.py | 20 +++++++++-----------
.../workflows/executor/test_process_executor.py | 12 +++++-------
2 files changed, 14 insertions(+), 18 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/03710639/aria/orchestrator/workflows/executor/process.py
----------------------------------------------------------------------
diff --git a/aria/orchestrator/workflows/executor/process.py b/aria/orchestrator/workflows/executor/process.py
index 92c83e3..40c0f32 100644
--- a/aria/orchestrator/workflows/executor/process.py
+++ b/aria/orchestrator/workflows/executor/process.py
@@ -125,14 +125,10 @@ class ProcessExecutor(base.BaseExecutor):
def terminate(self, task_id):
task = self._tasks.get(task_id)
# The process might have managed to finished so it would not be in the tasks list
- if task and os.getsid(os.getpid()) != os.getpgid(task.proc.pid):
- # If the above condition is false, the process group leader is the group leader
- # for the current session of the system, and killing it will kill the the entire
- # os session.
- os.killpg(os.getpgid(task.proc.pid), signal.SIGINT)
-
+ if task:
+ os.kill(task.proc.pid, signal.SIGINT)
time.sleep(self._termination_timeout)
- os.killpg(os.getpgid(task.proc.pid), signal.SIGTERM)
+ os.kill(task.proc.pid, signal.SIGKILL)
def _execute(self, ctx):
self._check_closed()
@@ -146,10 +142,12 @@ class ProcessExecutor(base.BaseExecutor):
env = self._construct_subprocess_env(task=ctx.task)
# Asynchronously start the operation in a subprocess
proc = subprocess.Popen(
- '{0} {1} {2}'.format(sys.executable, __file__, arguments_json_path),
- env=env,
- preexec_fn=os.setsid,
- shell=True)
+ [
+ sys.executable,
+ os.path.expanduser(os.path.expandvars(__file__)),
+ os.path.expanduser(os.path.expandvars(arguments_json_path))
+ ],
+ env=env)
self._tasks[ctx.task.id] = _Task(ctx=ctx, proc=proc)
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/03710639/tests/orchestrator/workflows/executor/test_process_executor.py
----------------------------------------------------------------------
diff --git a/tests/orchestrator/workflows/executor/test_process_executor.py b/tests/orchestrator/workflows/executor/test_process_executor.py
index be3e833..f58af88 100644
--- a/tests/orchestrator/workflows/executor/test_process_executor.py
+++ b/tests/orchestrator/workflows/executor/test_process_executor.py
@@ -90,15 +90,13 @@ class TestProcessExecutor(object):
executor.execute(ctx)
- while fs_test_holder.get('subproc', None) is None:
+ while fs_test_holder.get('started', False) is False:
time.sleep(1)
- pids = [executor._tasks[ctx.task.id].proc.pid, fs_test_holder['subproc']]
- assert any(p.pid == pid for p in psutil.process_iter() for pid in pids)
+ pid = executor._tasks[ctx.task.id].proc.pid
+ assert any(p.pid == pid for p in psutil.process_iter())
executor.terminate(ctx.task.id)
- time.sleep(10)
assert not any(p.pid == pid and p.status() != psutil.STATUS_ZOMBIE
- for p in psutil.process_iter()
- for pid in pids)
+ for p in psutil.process_iter())
@pytest.fixture
@@ -136,6 +134,6 @@ def model(tmpdir):
@operation
def freezing_task(holder_path, **_):
holder = FilesystemDataHolder(holder_path)
- holder['subproc'] = subprocess.Popen('while true; do sleep 5; done', shell=True).pid
+ holder['started'] = True
while True:
time.sleep(5)