128 lines
4.0 KiB
Python
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))
|