# 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)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://yo-sarawut.gitbook.io/tutorials/articles/python-1/psutil.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
