> For the complete documentation index, see [llms.txt](https://yo-sarawut.gitbook.io/tutorials/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://yo-sarawut.gitbook.io/tutorials/articles/python-1/psutil.md).

# psutil

psutil (process and system utilities) is a cross-platform library for retrieving information on running processes and system utilization `(CPU, memory, disks, network, sensors)` in Python. It is useful mainly for system monitoring, profiling and limiting process resources and management of running processes. It implements many functionalities offered by UNIX command line tools such as: ps, top, lsof, netstat, ifconfig, who, df, kill, free, nice, ionice, iostat, iotop, uptime, pidof, tty, taskset, pmap. psutil currently supports the following platforms:

### Example usages

### CPU

```python
import psutil
psutil.cpu_times()
```

scputimes(user=3961.46, nice=169.729, system=2150.659, idle=16900.540, iowait=629.59, irq=0.0, softirq=19.42, steal=0.0, guest=0, nice=0.0)

```python
 for x in range(3):
     psutil.cpu_percent(interval=1)
```

4.0 5.9 3.8

```python
 for x in range(3):
     psutil.cpu_percent(interval=1, percpu=True)
```

\[4.0, 6.9, 3.7, 9.2] \[7.0, 8.5, 2.4, 2.1] \[1.2, 9.0, 9.9, 7.2]

```python
 for x in range(3):
     psutil.cpu_times_percent(interval=1, percpu=False)
```

scputimes(user=1.5, nice=0.0, system=0.5, idle=96.5, iowait=1.5, irq=0.0, softirq=0.0, steal=0.0, guest=0.0, guest\_nice=0.0) scputimes(user=1.0, nice=0.0, system=0.0, idle=99.0, iowait=0.0, irq=0.0, softirq=0.0, steal=0.0, guest=0.0, guest\_nice=0.0) scputimes(user=2.0, nice=0.0, system=0.0, idle=98.0, iowait=0.0, irq=0.0, softirq=0.0, steal=0.0, guest=0.0, guest\_nice=0.0)

```python
 psutil.cpu_count()
```

4

```python
 psutil.cpu_count(logical=False)
```

2

```python
 psutil.cpu_stats()
```

scpustats(ctx\_switches=20455687, interrupts=6598984, soft\_interrupts=2134212, syscalls=0)

```python
psutil.cpu_freq()
```

scpufreq(current=931.42925, min=800.0, max=3500.0)

### Memory

```python
 import psutil
 psutil.virtual_memory()
```

```python
svmem(total=10367352832, available=6472179712, percent=37.6, used=8186245120, free=2181107712, active=4748992512, inactive=2758115328, buffers=790724608,
cached=3500347392, shared=787554304)
```

```python
psutil.swap_memory()
```

sswap(total=2097147904, used=296128512, free=1801019392, percent=14.1, sin=304193536, sout=677842944)

### Disks

```python
import psutil
psutil.disk_partitions()
```

\[sdiskpart(device='/dev/sda1', mountpoint='/', fstype='ext4', opts='rw,nosuid'), sdiskpart(device='/dev/sda2', mountpoint='/home', fstype='ext, opts='rw')]

```python
psutil.disk_usage('/')
```

sdiskusage(total=21378641920, used=4809781248, free=15482871808, percent=22.5)

```python
psutil.disk_io_counters(perdisk=False)
```

sdiskio(read\_count=719566, write\_count=1082197, read\_bytes=18626220032, write\_bytes=24081764352, read\_time=5023392, write\_time=63199568, read\_merged\_count=619166, write\_merged\_count=812396, busy\_time=4523412)

### Network

```python
import psutil
psutil.net_io_counters(pernic=True)
```

{'eth0': netio(bytes\_sent=485291293, bytes\_recv=6004858642, packets\_sent=3251564, packets\_recv=4787798, errin=0, errout=0, dropin=0, dropout=0), 'lo': netio(bytes\_sent=2838627, bytes\_recv=2838627, packets\_sent=30567, packets\_recv=30567, errin=0, errout=0, dropin=0, dropout=0)}

```python
psutil.net_connections()
```

```
[sconn(fd=115, family=<AddressFamily.AF_INET: 2>, type=<SocketType.SOCK_STREAM: 1>, laddr=addr(ip='10.0.0.1', port=48776), raddr=addr(ip='93.186.135.91', port=80), status='ESTABLISHED', pid=1254),
 sconn(fd=117, family=<AddressFamily.AF_INET: 2>, type=<SocketType.SOCK_STREAM: 1>, laddr=addr(ip='10.0.0.1', port=43761), raddr=addr(ip='72.14.234.100', port=80), status='CLOSING', pid=2987),
 sconn(fd=-1, family=<AddressFamily.AF_INET: 2>, type=<SocketType.SOCK_STREAM: 1>, laddr=addr(ip='10.0.0.1', port=60759), raddr=addr(ip='72.14.234.104', port=80), status='ESTABLISHED', pid=None),
 sconn(fd=-1, family=<AddressFamily.AF_INET: 2>, type=<SocketType.SOCK_STREAM: 1>, laddr=addr(ip='10.0.0.1', port=51314), raddr=addr(ip='72.14.234.83', port=443), status='SYN_SENT', pid=None)
 ...]
```

```python
psutil.net_if_addrs()
```

```
{'lo': [snic(family=<AddressFamily.AF_INET: 2>, address='127.0.0.1', netmask='255.0.0.0', broadcast='127.0.0.1', ptp=None),
        snic(family=<AddressFamily.AF_INET6: 10>, address='::1', netmask='ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff', broadcast=None, ptp=None),
        snic(family=<AddressFamily.AF_LINK: 17>, address='00:00:00:00:00:00', netmask=None, broadcast='00:00:00:00:00:00', ptp=None)],
 'wlan0': [snic(family=<AddressFamily.AF_INET: 2>, address='192.168.1.3', netmask='255.255.255.0', broadcast='192.168.1.255', ptp=None),
           snic(family=<AddressFamily.AF_INET6: 10>, address='fe80::c685:8ff:fe45:641%wlan0', netmask='ffff:ffff:ffff:ffff::', broadcast=None, ptp=None),
           snic(family=<AddressFamily.AF_LINK: 17>, address='c4:85:08:45:06:41', netmask=None, broadcast='ff:ff:ff:ff:ff:ff', ptp=None)]}
```

```python
psutil.net_if_stats()
```

```
{'eth0': snicstats(isup=True, duplex=<NicDuplex.NIC_DUPLEX_FULL: 2>, speed=100, mtu=1500),
 'lo': snicstats(isup=True, duplex=<NicDuplex.NIC_DUPLEX_UNKNOWN: 0>, speed=0, mtu=65536)}
```

### Sensors

```python
 import psutil
 psutil.sensors_temperatures()
```

```
{'acpitz': [shwtemp(label='', current=47.0, high=103.0, critical=103.0)],
 'asus': [shwtemp(label='', current=47.0, high=None, critical=None)],
 'coretemp': [shwtemp(label='Physical id 0', current=52.0, high=100.0, critical=100.0),
              shwtemp(label='Core 0', current=45.0, high=100.0, critical=100.0),
              shwtemp(label='Core 1', current=52.0, high=100.0, critical=100.0),
              shwtemp(label='Core 2', current=45.0, high=100.0, critical=100.0),
              shwtemp(label='Core 3', current=47.0, high=100.0, critical=100.0)]}
```

```python
 psutil.sensors_fans()
```

```python
{'asus': [sfan(label='cpu_fan', current=3200)]}
```

```python
psutil.sensors_battery()
```

```python
sbattery(percent=93, secsleft=16628, power_plugged=False)
```

### Other system info

```python
import psutil
psutil.users()
```

```
[suser(name='giampaolo', terminal='pts/2', host='localhost', started=1340737536.0, pid=1352),
 suser(name='giampaolo', terminal='pts/3', host='localhost', started=1340737792.0, pid=1788)]
```

psutil.boot\_time() 1365519115.0

### Process management

```python
 import psutil
 psutil.pids()
```

```
[1, 2, 3, 4, 5, 6, 7, 46, 48, 50, 51, 178, 182, 222, 223, 224, 268, 1215, 1216, 1220, 1221, 1243, 1244,
 1301, 1601, 2237, 2355, 2637, 2774, 3932, 4176, 4177, 4185, 4187, 4189, 4225, 4243, 4245, 4263, 4282,
 4306, 4311, 4312, 4313, 4314, 4337, 4339, 4357, 4358, 4363, 4383, 4395, 4408, 4433, 4443, 4445, 4446,
 5167, 5234, 5235, 5252, 5318, 5424, 5644, 6987, 7054, 7055, 7071]
```

```python
p = psutil.Process(7055)
p.name()
```

'python'

```python
 p.exe()
```

'/usr/bin/python'

```python
p.cwd()
```

'/home/giampaolo'

```python
p.cmdline()
```

\['/usr/bin/python', 'main.py']

```python
p.pid
```

7055

```python
p.ppid()
```

7054

```python
p.parent()
```

```python
p.children()
```

```
[<psutil.Process(pid=8031, name='python') at 14020832451977>,
 <psutil.Process(pid=8044, name='python') at 19229444921932>]
```

```python
p.status()
```

'running'

```python
p.username()
```

'giampaolo'

```python
p.create_time()
```

1267551141.5019531

```python
p.terminal()
```

'/dev/pts/0'

```python
p.uids()
```

puids(real=1000, effective=1000, saved=1000)

```python
p.gids()
```

pgids(real=1000, effective=1000, saved=1000)

```python
p.cpu_times()
```

pcputimes(user=1.02, system=0.31, children\_user=0.32, children\_system=0.1)

```python
p.cpu_percent(interval=1.0)
```

12.1

```python
p.cpu_affinity()
```

\[0, 1, 2, 3]

```python
p.cpu_affinity([0, 1])  # set
p.cpu_num()
```

1

```python
p.memory_info()
```

pmem(rss=10915840, vms=67608576, shared=3313664, text=2310144, lib=0, data=7262208, dirty=0)

```python
p.memory_full_info()  # "real" USS memory usage (Linux, OSX, Win only)
```

pfullmem(rss=10199040, vms=52133888, shared=3887104, text=2867200, lib=0, data=5967872, dirty=0, uss=6545408, pss=6872064, swap=0)

```python
p.memory_percent()
```

0.7823

```python
p.memory_maps()
```

```
[pmmap_grouped(path='/lib/x8664-linux-gnu/libutil-2.15.so', rss=32768, size=2125824, pss=32768, shared_clean=0, shared_dirty=0, private_clean=20480, private_dirty=12288, referenced=32768, anonymous=12288, swap=0),
 pmmap_grouped(path='/lib/x8664-linux-gnu/libc-2.15.so', rss=3821568, size=3842048, pss=3821568, shared_clean=0, shared_dirty=0, private_clean=0, private_dirty=3821568, referenced=3575808, anonymous=3821568, swap=0),
 pmmap_grouped(path='/lib/x8664-linux-gnu/libcrypto.so.0.1', rss=34124, rss=32768, size=2134016, pss=15360, shared_clean=24576, shared_dirty=0, private_clean=0, private_dirty=8192, referenced=24576, anonymous=8192, swap=0),
 pmmap_grouped(path='[heap]',  rss=32768, size=139264, pss=32768, shared_clean=0, shared_dirty=0, private_clean=0, private_dirty=32768, referenced=32768, anonymous=32768, swap=0),
 pmmap_grouped(path='[stack]', rss=2465792, size=2494464, pss=2465792, shared_clean=0, shared_dirty=0, private_clean=0, private_dirty=2465792, referenced=2277376, anonymous=2465792, swap=0),
 ...]
```

```python
p.io_counters()
```

pio(read\_count=478001, write\_count=59371, read\_bytes=700416, write\_bytes=69632, read\_chars=456232, write\_chars=517543)

```python
p.open_files()
```

\[popenfile(path='/home/giampaolo/svn/psutil/setup.py', fd=3, position=0, mode='r', flags=32768), popenfile(path='/var/log/monitd', fd=4, position=235542, mode='a', flags=33793)]

```python
p.connections()
```

\[pconn(fd=115, family=, type=, laddr=addr(ip='10.0.0.1', port=48776), raddr=addr(ip='93.186.135.91', port=80), status='ESTABLISHED'), pconn(fd=117, family=, type=, laddr=addr(ip='10.0.0.1', port=43761), raddr=addr(ip='72.14.234.100', port=80), status='CLOSING'), pconn(fd=119, family=, type=, laddr=addr(ip='10.0.0.1', port=60759), raddr=addr(ip='72.14.234.104', port=80), status='ESTABLISHED'), pconn(fd=123, family=, type=, laddr=addr(ip='10.0.0.1', port=51314), raddr=addr(ip='72.14.234.83', port=443), status='SYN\_SENT')]

```python
p.num_threads()
```

4

```python
p.num_fds()
```

8

```python
p.threads()
```

\[pthread(id=5234, user\_time=22.5, system\_time=9.2891), pthread(id=5235, user\_time=0.0, system\_time=0.0), pthread(id=5236, user\_time=0.0, system\_time=0.0), pthread(id=5237, user\_time=0.0707, system\_time=1.1)]

```python
p.num_ctx_switches()
```

pctxsw(voluntary=78, involuntary=19)

```python
p.nice()
```

0

```python
p.nice(10)  # set
p.ionice(psutil.IOPRIO_CLASS_IDLE)  # IO priority (Win and Linux only)
p.ionice()
```

```
pionice(ioclass=<IOPriority.IOPRIO_CLASS_IDLE: 3>, value=0)
```

```python
p.rlimit(psutil.RLIMIT_NOFILE, (5, 5))  # set resource limits (Linux only)
p.rlimit(psutil.RLIMIT_NOFILE)
```

(5, 5)

```python
p.environ()
```

```
 {'LC_PAPER': 'it_IT.UTF-8', 'SHELL': '/bin/bash', 'GREP_OPTIONS': '--color=auto', 'XDG_CONFIG_DIRS': '/etc/xdg/xdg-ubuntu:/usr/share/upstart/xdg:/etc/xdg', 'COLORTERM': 'gnome-terminal', ...}
```

```python
p.as_dict()
```

```
{'status': 'running', 'num_ctx_switches': pctxsw(voluntary=63, involuntary=1), 'pid': 5457, ...}
```

```python
p.is_running()
```

True

```python
p.suspend()
p.resume()
p.terminate()
p.wait(timeout=3)
```

0

```python
psutil.test()
```

```
USER         PID %CPU %MEM     VSZ     RSS TTY        START    TIME  COMMAND
root           1  0.0  0.0   24584    2240            Jun17   00:00  init
root           2  0.0  0.0       0       0            Jun17   00:00  kthreadd
root           3  0.0  0.0       0       0            Jun17   00:05  ksoftirqd/0
...
giampaolo  31475  0.0  0.0   20760    3024 /dev/pts/0 Jun19   00:00  python2.4
giampaolo  31721  0.0  2.2  773060  181896            00:04   10:30  chrome
root       31763  0.0  0.0       0       0            00:05   00:00  kworker/0:1
```

### Further process APIs

```python
import psutil
for proc in psutil.process_iter(attrs=['pid', 'name']):
    print(proc.info)
```

{'pid': 1, 'name': 'systemd'} {'pid': 2, 'name': 'kthreadd'} {'pid': 3, 'name': 'ksoftirqd/0'} ...

```python
psutil.pid_exists(3)
```

True

```python
def on_terminate(proc):
...     print("process {} terminated".format(proc))
```

## waits for multiple processes to terminate

gone, alive = psutil.wait\_procs(procs\_list, timeout=3, callback=on\_terminate)

### Popen wrapper:

```python
import psutil
from subprocess import PIPE
p = psutil.Popen(["/usr/bin/python", "-c", "print('hello')"], stdout=PIPE)
p.name()
```

'python'

```python
p.username()
```

'giampaolo'

```python
p.communicate()
```

('hello\n', None)

```python
p.wait(timeout=2)
```

0

### Windows services

```python
list(psutil.win_service_iter())
```

```
[<WindowsService(name='AeLookupSvc', display_name='Application Experience') at 38850096>,
 <WindowsService(name='ALG', display_name='Application Layer Gateway Service') at 38850128>,
 <WindowsService(name='APNMCP', display_name='Ask Update Service') at 38850160>,
 <WindowsService(name='AppIDSvc', display_name='Application Identity') at 38850192>,...]
```

```python
s = psutil.win_service_get('alg')
s.as_dict()
```

```
{'binpath': 'C:\\Windows\\System32\\alg.exe',
 'description': 'Provides support for 3rd party protocol plug-ins for Internet Connection Sharing',
 'display_name': 'Application Layer Gateway Service',
 'name': 'alg',
 'pid': None,
 'start_type': 'manual',
 'status': 'stopped',
 'username': 'NT AUTHORITY\\LocalService'}
```

**Other samples** See [doc recipes.](http://psutil.readthedocs.io/#recipes)
