diff options
author | Pranav <prprakas@redhat.com> | 2020-04-15 15:57:32 +0530 |
---|---|---|
committer | Bala Konda Reddy M <bala12352@gmail.com> | 2020-04-17 09:00:36 +0000 |
commit | e82203f67171838b46d82312ceb010976e1ae4c2 (patch) | |
tree | 2bef6442cfaab74031df0f3b0f6e2e915f0d3590 /glustolibs-misc/glustolibs | |
parent | fb77a9055e12b753d202d55d4e44776735588160 (diff) |
[Lib] Add kill_process method
The method kills the given set of processes running on the specified
node. It takes process ids or process names and uses the kill command
to terminate the process and returns status as boolean value
Change-Id: Ic6c316dac6b3496d34614c568115b0fa0f40d07d
Signed-off-by: Pranav <prprakas@redhat.com>
Diffstat (limited to 'glustolibs-misc/glustolibs')
-rwxr-xr-x | glustolibs-misc/glustolibs/misc/misc_libs.py | 51 |
1 files changed, 49 insertions, 2 deletions
diff --git a/glustolibs-misc/glustolibs/misc/misc_libs.py b/glustolibs-misc/glustolibs/misc/misc_libs.py index fea86d125..109dc9621 100755 --- a/glustolibs-misc/glustolibs/misc/misc_libs.py +++ b/glustolibs-misc/glustolibs/misc/misc_libs.py @@ -341,8 +341,8 @@ def install_arequal(list_of_nodes): list_of_nodes = [list_of_nodes] try: - arequal_repo = (g.config['dependencies']['testing_tools']['arequal'] - ['repo']) + arequal_repo = (g.config['dependencies']['testing_tools'] + ['arequal']['repo']) except KeyError: arequal_repo = ("https://copr.fedorainfracloud.org/coprs/nigelbabu/" "arequal/repo/epel-7/nigelbabu-arequal-epel-7.repo") @@ -619,3 +619,50 @@ def git_clone_and_compile(hosts, link, dir_name, compile_option='False'): else: g.log.info("Successfully cloned/compiled repo on %s" % host) return True + + +def kill_process(mnode, process_ids='', process_names=''): + """Kills the given set of process running in the specified node + + Args: + mnode (str): Node at which the command has to be executed + process_ids (list|str): List of pid's to be terminated + process_names(list|str): List of Process names to be terminated + + Returns: + bool : True on successful termination of all the processes + False, otherwise + Example: + >>> kill_process("10.70.43.68", process_ids=27664) + True/False + >>> kill_process("10.70.43.68", process_names=["glustershd", + "glusterd"]) + True/False + """ + if process_names: + process_ids = [] + if not isinstance(process_names, list): + process_names = [process_names] + + for process in process_names: + ret, pids, _ = g.run(mnode, + "ps -aef | grep -i '%s' | grep -v 'grep' | " + "awk '{ print $2 }'" % process) + pids = pids.split("\n")[:-1] + if not pids: + g.log.error("Getting pid for process %s failed" % process) + return False + for pid in pids: + if pid: + process_ids.append(pid) + + if process_ids and not isinstance(process_ids, list): + process_ids = [process_ids] + + # Kill process + for pid in process_ids: + ret, _, _ = g.run(mnode, "kill -9 %s" % str(pid)) + if ret: + g.log.error("Failed to kill process with pid %s" % str(pid)) + return False + return True |