Python & Ubuntu 擷取進程資訊

來源:互聯網
上載者:User

備忘,其實是想知道該進程使用的記憶體狀況。

 

首先要擷取系統的記憶體資訊:


def memory_stat():
    '''
        return the memory info
    '''
    mem = {}
    stat = {}
    f = open('/proc/meminfo')
    lines = f.readlines()
    for line in lines:
        if len(line) < 2 : continue
        name = line.split(':')[0]
        var  = line.split(':')[1].split()[0]
        mem[name] = long(var) * 1024.0
    stat['MemUsed'] = mem['MemTotal'] - mem['MemFree'] - mem['Buffers'] - mem['Cached']
    stat['MemTotal'] = mem['MemTotal']
    stat['MemFree'] = mem['MemFree']
    stat['Buffers'] = mem['Buffers']
    stat['Cached'] = mem['Cached']
    return stat

因為我下面使用的方法來擷取的進程資訊,只能知道該進程占記憶體的百分比。所以必須先擷取記憶體的總量。

接下來定義一個擷取進程資訊的函數。

 

 

def proc_stat(procid):
    import commands
    ps_stat = None
    try:
        #擷取進程的記憶體資訊
        ps_stat = commands.getoutput('ps -fp %s -u' % procid).split('\n')[2].split()
    except:
        return {}

    procInfo = {}

    procInfo['PID'] = procid

    #這裡調用了剛才定義的 memory_stat 擷取記憶體總量,
    #然後乘以該進程所佔記憶體的百分比,即為記憶體使用量量
    procInfo['MemoryUsed'] = memory_stat()['MemTotal'] * float(ps_stat[3]) / 100

    procInfo['Start'] = ps_stat[8]
    procInfo['StartCommand'] = ps_stat[10]

    return procInfo

 

 接著使用 ipython ,測試 ,先開一個 python 進程 ,假設進程ID為2168,則:

 

from MachineInfo import proc_stat

ps = proc_stat(2168)

ps

{'MemoryUsed': 3650289.6639999999, #這裡是以 byte 為單位,也可以自己進行轉換
 'PID': 2168,
 'Start': '21:56',
 'StartCommand': 'python'}

 

記錄完畢。Over~

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.