| Index: third_party/psutil/examples/process_detail.py | 
| diff --git a/third_party/psutil/examples/process_detail.py b/third_party/psutil/examples/process_detail.py | 
| new file mode 100644 | 
| index 0000000000000000000000000000000000000000..4c791d167cfc91c97b54ab60c43c214f0167a850 | 
| --- /dev/null | 
| +++ b/third_party/psutil/examples/process_detail.py | 
| @@ -0,0 +1,122 @@ | 
| +#!/usr/bin/env python | 
| +# | 
| +# $Id: process_detail.py 1143 2011-10-05 19:11:59Z g.rodola $ | 
| +# | 
| +# Copyright (c) 2009, Jay Loden, Giampaolo Rodola'. All rights reserved. | 
| +# Use of this source code is governed by a BSD-style license that can be | 
| +# found in the LICENSE file. | 
| + | 
| +""" | 
| +Print detailed information about a process. | 
| +""" | 
| + | 
| +import os | 
| +import datetime | 
| +import socket | 
| +import sys | 
| + | 
| +import psutil | 
| +from psutil._compat import namedtuple | 
| + | 
| + | 
| +def convert_bytes(n): | 
| +    if n == 0: | 
| +        return '0B' | 
| +    symbols = ('k', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y') | 
| +    prefix = {} | 
| +    for i, s in enumerate(symbols): | 
| +        prefix[s] = 1 << (i+1)*10 | 
| +    for s in reversed(symbols): | 
| +        if n >= prefix[s]: | 
| +            value = float(n) / prefix[s] | 
| +            return '%.1f%s' % (value, s) | 
| + | 
| +def print_(a, b): | 
| +    if sys.stdout.isatty(): | 
| +        fmt = '\x1b[1;32m%-17s\x1b[0m %s' %(a, b) | 
| +    else: | 
| +        fmt = '%-15s %s' %(a, b) | 
| +    print fmt | 
| + | 
| +def run(pid): | 
| +    p = psutil.Process(pid) | 
| +    if p.parent: | 
| +        parent = '(%s)' % p.parent.name | 
| +    else: | 
| +        parent = '' | 
| +    started = datetime.datetime.fromtimestamp(p.create_time).strftime('%Y-%M-%d %H:%M') | 
| +    io = p.get_io_counters() | 
| +    mem = p.get_memory_info() | 
| +    mem = '%s%% (resident=%s, virtual=%s) ' %(round(p.get_memory_percent(), 1), | 
| +                                              convert_bytes(mem.rss), | 
| +                                              convert_bytes(mem.vms)) | 
| +    cpu_times = p.get_cpu_times() | 
| +    cpu_percent = p.get_cpu_percent(0) | 
| +    children = p.get_children() | 
| +    files = p.get_open_files() | 
| +    threads = p.get_threads() | 
| +    connections = p.get_connections() | 
| + | 
| +    print_('pid', p.pid) | 
| +    print_('name', p.name) | 
| +    print_('exe', p.exe) | 
| +    print_('parent', '%s %s' % (p.ppid, parent)) | 
| +    print_('cmdline', ' '.join(p.cmdline)) | 
| +    print_('started', started) | 
| +    print_('user', p.username) | 
| +    if os.name == 'posix': | 
| +        print_('uids', 'real=%s, effective=%s, saved=%s' % p.uids) | 
| +        print_('gids', 'real=%s, effective=%s, saved=%s' % p.gids) | 
| +        print_('terminal', p.terminal or '') | 
| +    if hasattr(p, 'getcwd'): | 
| +        print_('cwd', p.getcwd()) | 
| +    print_('memory', mem) | 
| +    print_('cpu', '%s%% (user=%s, system=%s)' % (cpu_percent, | 
| +                                                 cpu_times.user, | 
| +                                                 cpu_times.system)) | 
| +    print_('status', p.status) | 
| +    print_('niceness', p.nice) | 
| +    print_('num threads', p.get_num_threads()) | 
| +    if hasattr(p, 'get_io_counters'): | 
| +        print_('I/O', 'bytes-read=%s, bytes-written=%s' % \ | 
| +                                               (convert_bytes(io.read_bytes), | 
| +                                                convert_bytes(io.write_bytes))) | 
| +    if children: | 
| +        print_('children', '') | 
| +        for child in children: | 
| +            print_('', 'pid=%s name=%s' % (child.pid, child.name)) | 
| + | 
| +    if files: | 
| +        print_('open files', '') | 
| +        for file in files: | 
| +            print_('',  'fd=%s %s ' % (file.fd, file.path)) | 
| + | 
| +    if threads: | 
| +        print_('running threads', '') | 
| +        for thread in threads: | 
| +            print_('',  'id=%s, user-time=%s, sys-time=%s' \ | 
| +                         % (thread.id, thread.user_time, thread.system_time)) | 
| +    if connections: | 
| +        print_('open connections', '') | 
| +        for conn in connections: | 
| +            type = 'TCP' if conn.type == socket.SOCK_STREAM else 'UDP' | 
| +            lip, lport = conn.local_address | 
| +            if not conn.remote_address: | 
| +                rip, rport = '*', '*' | 
| +            else: | 
| +                rip, rport = conn.remote_address | 
| +            print_('',  '%s:%s -> %s:%s type=%s status=%s' \ | 
| +                         % (lip, lport, rip, rport, type, conn.status)) | 
| + | 
| +def main(argv=None): | 
| +    if argv is None: | 
| +        argv = sys.argv | 
| +    if len(argv) == 1: | 
| +        sys.exit(run(os.getpid())) | 
| +    elif len(argv) == 2: | 
| +        sys.exit(run(int(argv[1]))) | 
| +    else: | 
| +        sys.exit('usage: %s [pid]' % __file__) | 
| + | 
| +if __name__ == '__main__': | 
| +    sys.exit(main()) | 
|  |