Project

General

Profile

Bug #1278 ยป process_monitor.py

Rogers, Chris, 23 May 2013 08:47

 
1
import sys
2
import os
3
import time
4

    
5
def print_mem_usage(pid):
6
    """
7
    Get system resources used by process pid
8

    
9
      @param pid process id
10

    
11
    @returns dict of {"pid":pid, "memory":mem_usage}
12
    """
13
    columns = "%cpu,%mem,etime"
14
    ps_out = os.popen('ps -p %d -o %s' % (pid, columns)).readlines()
15
    if len(ps_out) == 2:
16
        out_list = ps_out[1].rstrip().split()
17
        col_list = columns.split(",")
18
        out = dict(zip(col_list, out_list))
19
        print pid, out
20
        return True
21
    else:
22
        return False
23

    
24
def main(pid_list):
25
    """
26
    Iterate over list of pids; while pids exist, print cpu usage etc
27
    """
28
    while len(pid_list) > 0:
29
        time.sleep(5)
30
        _pid_list = []
31
        for pid in pid_list:
32
            if print_mem_usage(int(pid)):
33
                _pid_list.append(pid)
34
        pid_list = _pid_list
35

    
36
if __name__ == "__main__":
37
    main(sys.argv[1:])
38

    
    (1-1/1)