openGauss-OM/script/base_utils/os/process_util.py
coolany eae422baf3 适配CM组件
Signed-off-by: coolany <kyosang@163.com>

support cgroup

追加合入
2022-03-05 18:51:52 +08:00

128 lines
4.0 KiB
Python

# -*- coding:utf-8 -*-
#############################################################################
# Copyright (c) 2020 Huawei Technologies Co.,Ltd.
#
# openGauss is licensed under Mulan PSL v2.
# You can use this software according to the terms
# and conditions of the Mulan PSL v2.
# You may obtain a copy of Mulan PSL v2 at:
#
# http://license.coscl.org.cn/MulanPSL2
#
# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS,
# WITHOUT WARRANTIES OF ANY KIND,
# EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
# MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
# See the Mulan PSL v2 for more details.
# ----------------------------------------------------------------------------
# Description :
#############################################################################
import os
import subprocess
import sys
from gspylib.common.ErrorCode import ErrorCode
from base_utils.os.cmd_util import CmdUtil
local_dir_path = os.path.dirname(os.path.realpath(__file__))
sys.path.insert(0, local_dir_path + "/../../../lib")
import psutil
class ProcessUtil(object):
"""process util"""
@staticmethod
def getProcessIdByKeyWordsCmd(keywords):
"""
function: get proecess id by keywords cmd
input : keywords
output : str
"""
ps_cmd = CmdUtil.findCmdInPath('ps')
grep = CmdUtil.findCmdInPath('grep')
awk = CmdUtil.findCmdInPath('awk')
return "%s -ef| %s -F '%s' | %s -F -v 'grep'| %s '{print $2}'" % (
ps_cmd, grep, keywords, grep, awk)
@staticmethod
def getProcess(process_keywords):
"""
function : Get process id by keywords
input : process_keywords
output : process_id
"""
process_id = []
cmd = ProcessUtil.getProcessIdByKeyWordsCmd(process_keywords)
(status, output) = subprocess.getstatusoutput(cmd)
if status == 0 and str(output.strip()) != "":
# kill process
process_id = output.strip().split("\n")
return process_id
@staticmethod
def getProcPidList(proc_name):
"""
function : Get process id by proc_name
input : proc_name
output : pidList
"""
pid_list = []
for pid in psutil.pids():
try:
p = psutil.Process(pid)
if proc_name == p.name():
pid_list.append(pid)
except psutil.NoSuchProcess:
pass
return pid_list
@staticmethod
def killProcessByProcName(proc_name, kill_type=2):
"""
function : Kill the process
input : int, int
output : boolean
"""
try:
pid_list = ProcessUtil.getProcPidList(proc_name)
for pid in pid_list:
os.kill(pid, kill_type)
return True
except Exception:
return False
@staticmethod
def killallProcess(user_name, proc_name, kill_type='2'):
"""
function : Kill all processes by user_name and proc_name.
input : user_name, proc_name, kill_type
output : boolean
"""
cmd = "%s >/dev/null 2>&1" % CmdUtil.getKillallProcessCmd(kill_type,
user_name,
proc_name)
status = subprocess.getstatusoutput(cmd)[0]
if status != 0:
return False
return True
@staticmethod
def getPortProcessInfo(port):
"""
function : get port occupation process
input : port
output : process info
"""
try:
process_info = ""
cmd = "netstat -an | grep -w %s" % port
output = subprocess.getstatusoutput(cmd)[1]
process_info += "%s\n" % output
return process_info
except Exception as excep:
raise Exception(ErrorCode.GAUSS_514["GAUSS_51400"] % cmd +
" Error:\n%s" % str(excep))