py脚本:获取进程信息

这里以mysqld进程为例子

# pip install psutil
import psutil
import time
import re, sys

# x:进程name y:非进程name
# 由于这里监控的是mysqld,如果不加限制的话会先识别mysqld_safe,所以要加上mysql_safe的判别 
def processinfo(x, y):
    p_list = psutil.process_iter()
    tlp = 0
    try:
        for process in p_list:
            aa = str(process)
            f_x = re.compile(x, re.I)
            f_y = re.compile(y, re.I)
            if f_x.search(aa) and f_y.search(aa) == None:
                tlp = int(aa.split('pid=')[1].split(',')[0]) 
                # 检索pid列表并获取传入值的pid
                return tlp
    except (psutil.NoSuchProcess):
            print('Ransomware process is caught, but the process does '
                  'not exist (PID: %d)' % aa.pid)

# tlp:进程pid
# 打印出time、pid、name、%mem、%cpu
def getinfo(tlp):
    p = psutil.Process(tlp)
    try:
        pid = p.pid
        name = p.name()
        Memory = p.memory_percent(memtype="rss")
        localtime = time.strftime('%H:%M:%S', time.localtime(time.time()))
        # 取进程pid 进程名 进程内存
    except IOError as e:
        print(e)
    else:
        # return pid, name, Memory, time
        print("Time:%s" % (localtime), "PID:%s" % (pid), "Name:%s" % (name),"Memory=%.3f%%" % (Memory))


if __name__ == "__main__":
    while 0 < 1:
        s = processinfo('mysqld','mysqld_safe')
        getinfo(s)
        time.sleep(5)

打印的结果为:

[root@VM-90-225-centos /home/hanhan/NewProject/test]# python test_demo.py 
Time:17:06:17 PID:2705 Name:mysqld Memory=30.605%
Time:17:06:22 PID:2705 Name:mysqld Memory=30.605%
Time:17:06:27 PID:2705 Name:mysqld Memory=30.605%

你可能感兴趣的:(前后端开发功能代码库,数据库,database,python)