METADATA 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542
  1. Metadata-Version: 2.1
  2. Name: psutil
  3. Version: 7.2.2
  4. Summary: Cross-platform lib for process and system monitoring.
  5. Home-page: https://github.com/giampaolo/psutil
  6. Author: Giampaolo Rodola
  7. Author-email: g.rodola@gmail.com
  8. License: BSD-3-Clause
  9. Keywords: ps,top,kill,free,lsof,netstat,nice,tty,ionice,uptime,taskmgr,process,df,iotop,iostat,ifconfig,taskset,who,pidof,pmap,smem,pstree,monitoring,ulimit,prlimit,smem,performance,metrics,agent,observability
  10. Platform: Platform Independent
  11. Classifier: Development Status :: 5 - Production/Stable
  12. Classifier: Environment :: Console
  13. Classifier: Intended Audience :: Developers
  14. Classifier: Intended Audience :: Information Technology
  15. Classifier: Intended Audience :: System Administrators
  16. Classifier: Operating System :: MacOS :: MacOS X
  17. Classifier: Operating System :: Microsoft :: Windows :: Windows 10
  18. Classifier: Operating System :: Microsoft :: Windows :: Windows 11
  19. Classifier: Operating System :: Microsoft :: Windows :: Windows 7
  20. Classifier: Operating System :: Microsoft :: Windows :: Windows 8
  21. Classifier: Operating System :: Microsoft :: Windows :: Windows 8.1
  22. Classifier: Operating System :: Microsoft :: Windows :: Windows Server 2003
  23. Classifier: Operating System :: Microsoft :: Windows :: Windows Server 2008
  24. Classifier: Operating System :: Microsoft :: Windows :: Windows Vista
  25. Classifier: Operating System :: Microsoft :: Windows
  26. Classifier: Operating System :: Microsoft
  27. Classifier: Operating System :: OS Independent
  28. Classifier: Operating System :: POSIX :: AIX
  29. Classifier: Operating System :: POSIX :: BSD :: FreeBSD
  30. Classifier: Operating System :: POSIX :: BSD :: NetBSD
  31. Classifier: Operating System :: POSIX :: BSD :: OpenBSD
  32. Classifier: Operating System :: POSIX :: BSD
  33. Classifier: Operating System :: POSIX :: Linux
  34. Classifier: Operating System :: POSIX :: SunOS/Solaris
  35. Classifier: Operating System :: POSIX
  36. Classifier: Programming Language :: C
  37. Classifier: Programming Language :: Python :: 3
  38. Classifier: Programming Language :: Python :: Implementation :: CPython
  39. Classifier: Programming Language :: Python :: Implementation :: PyPy
  40. Classifier: Programming Language :: Python
  41. Classifier: Topic :: Software Development :: Libraries :: Python Modules
  42. Classifier: Topic :: Software Development :: Libraries
  43. Classifier: Topic :: System :: Benchmark
  44. Classifier: Topic :: System :: Hardware
  45. Classifier: Topic :: System :: Monitoring
  46. Classifier: Topic :: System :: Networking :: Monitoring :: Hardware Watchdog
  47. Classifier: Topic :: System :: Networking :: Monitoring
  48. Classifier: Topic :: System :: Networking
  49. Classifier: Topic :: System :: Operating System
  50. Classifier: Topic :: System :: Systems Administration
  51. Classifier: Topic :: Utilities
  52. Requires-Python: >=3.6
  53. Description-Content-Type: text/x-rst
  54. License-File: LICENSE
  55. Provides-Extra: dev
  56. Requires-Dist: psleak ; extra == 'dev'
  57. Requires-Dist: pytest ; extra == 'dev'
  58. Requires-Dist: pytest-instafail ; extra == 'dev'
  59. Requires-Dist: pytest-xdist ; extra == 'dev'
  60. Requires-Dist: setuptools ; extra == 'dev'
  61. Requires-Dist: abi3audit ; extra == 'dev'
  62. Requires-Dist: black ; extra == 'dev'
  63. Requires-Dist: check-manifest ; extra == 'dev'
  64. Requires-Dist: coverage ; extra == 'dev'
  65. Requires-Dist: packaging ; extra == 'dev'
  66. Requires-Dist: pylint ; extra == 'dev'
  67. Requires-Dist: pyperf ; extra == 'dev'
  68. Requires-Dist: pypinfo ; extra == 'dev'
  69. Requires-Dist: pytest-cov ; extra == 'dev'
  70. Requires-Dist: requests ; extra == 'dev'
  71. Requires-Dist: rstcheck ; extra == 'dev'
  72. Requires-Dist: ruff ; extra == 'dev'
  73. Requires-Dist: sphinx ; extra == 'dev'
  74. Requires-Dist: sphinx-rtd-theme ; extra == 'dev'
  75. Requires-Dist: toml-sort ; extra == 'dev'
  76. Requires-Dist: twine ; extra == 'dev'
  77. Requires-Dist: validate-pyproject[all] ; extra == 'dev'
  78. Requires-Dist: virtualenv ; extra == 'dev'
  79. Requires-Dist: vulture ; extra == 'dev'
  80. Requires-Dist: wheel ; extra == 'dev'
  81. Requires-Dist: colorama ; (os_name == "nt") and extra == 'dev'
  82. Requires-Dist: pyreadline3 ; (os_name == "nt") and extra == 'dev'
  83. Requires-Dist: pywin32 ; (os_name == "nt" and implementation_name != "pypy") and extra == 'dev'
  84. Requires-Dist: wheel ; (os_name == "nt" and implementation_name != "pypy") and extra == 'dev'
  85. Requires-Dist: wmi ; (os_name == "nt" and implementation_name != "pypy") and extra == 'dev'
  86. Provides-Extra: test
  87. Requires-Dist: psleak ; extra == 'test'
  88. Requires-Dist: pytest ; extra == 'test'
  89. Requires-Dist: pytest-instafail ; extra == 'test'
  90. Requires-Dist: pytest-xdist ; extra == 'test'
  91. Requires-Dist: setuptools ; extra == 'test'
  92. Requires-Dist: pywin32 ; (os_name == "nt" and implementation_name != "pypy") and extra == 'test'
  93. Requires-Dist: wheel ; (os_name == "nt" and implementation_name != "pypy") and extra == 'test'
  94. Requires-Dist: wmi ; (os_name == "nt" and implementation_name != "pypy") and extra == 'test'
  95. | |downloads| |stars| |forks| |contributors| |packages|
  96. | |version| |license| |stackoverflow| |twitter| |tidelift|
  97. | |github-actions-wheels| |github-actions-bsd|
  98. .. |downloads| image:: https://img.shields.io/pypi/dm/psutil.svg
  99. :target: https://clickpy.clickhouse.com/dashboard/psutil
  100. :alt: Downloads
  101. .. |stars| image:: https://img.shields.io/github/stars/giampaolo/psutil.svg
  102. :target: https://github.com/giampaolo/psutil/stargazers
  103. :alt: Github stars
  104. .. |forks| image:: https://img.shields.io/github/forks/giampaolo/psutil.svg
  105. :target: https://github.com/giampaolo/psutil/network/members
  106. :alt: Github forks
  107. .. |contributors| image:: https://img.shields.io/github/contributors/giampaolo/psutil.svg
  108. :target: https://github.com/giampaolo/psutil/graphs/contributors
  109. :alt: Contributors
  110. .. |stackoverflow| image:: https://img.shields.io/badge/stackoverflow-Ask%20questions-blue.svg
  111. :target: https://stackoverflow.com/questions/tagged/psutil
  112. :alt: Stackoverflow
  113. .. |github-actions-wheels| image:: https://img.shields.io/github/actions/workflow/status/giampaolo/psutil/.github/workflows/build.yml.svg?label=Linux%2C%20macOS%2C%20Windows
  114. :target: https://github.com/giampaolo/psutil/actions?query=workflow%3Abuild
  115. :alt: Linux, macOS, Windows
  116. .. |github-actions-bsd| image:: https://img.shields.io/github/actions/workflow/status/giampaolo/psutil/.github/workflows/bsd.yml.svg?label=FreeBSD,%20NetBSD,%20OpenBSD
  117. :target: https://github.com/giampaolo/psutil/actions?query=workflow%3Absd-tests
  118. :alt: FreeBSD, NetBSD, OpenBSD
  119. .. |version| image:: https://img.shields.io/pypi/v/psutil.svg?label=pypi
  120. :target: https://pypi.org/project/psutil
  121. :alt: Latest version
  122. .. |packages| image:: https://repology.org/badge/tiny-repos/python:psutil.svg
  123. :target: https://repology.org/metapackage/python:psutil/versions
  124. :alt: Binary packages
  125. .. |license| image:: https://img.shields.io/pypi/l/psutil.svg
  126. :target: https://github.com/giampaolo/psutil/blob/master/LICENSE
  127. :alt: License
  128. .. |twitter| image:: https://img.shields.io/twitter/follow/grodola?style=flat
  129. :target: https://twitter.com/grodola
  130. :alt: Twitter Follow
  131. .. |tidelift| image:: https://tidelift.com/badges/github/giampaolo/psutil?style=flat
  132. :target: https://tidelift.com/subscription/pkg/pypi-psutil?utm_source=pypi-psutil&utm_medium=referral&utm_campaign=readme
  133. :alt: Tidelift
  134. -----
  135. Quick links
  136. ===========
  137. - `Home page <https://github.com/giampaolo/psutil>`_
  138. - `Install <https://github.com/giampaolo/psutil/blob/master/INSTALL.rst>`_
  139. - `Documentation <http://psutil.readthedocs.io>`_
  140. - `Download <https://pypi.org/project/psutil/#files>`_
  141. - `Forum <http://groups.google.com/group/psutil/topics>`_
  142. - `StackOverflow <https://stackoverflow.com/questions/tagged/psutil>`_
  143. - `Blog <https://gmpy.dev/tags/psutil>`_
  144. - `What's new <https://github.com/giampaolo/psutil/blob/master/HISTORY.rst>`_
  145. Summary
  146. =======
  147. psutil (process and system utilities) is a cross-platform library for
  148. retrieving information on **running processes** and **system utilization**
  149. (CPU, memory, disks, network, sensors) in Python.
  150. It is useful mainly for **system monitoring**, **profiling and limiting process
  151. resources** and **management of running processes**.
  152. It implements many functionalities offered by classic UNIX command line tools
  153. such as *ps, top, iotop, lsof, netstat, ifconfig, free* and others.
  154. psutil currently supports the following platforms:
  155. - **Linux**
  156. - **Windows**
  157. - **macOS**
  158. - **FreeBSD, OpenBSD**, **NetBSD**
  159. - **Sun Solaris**
  160. - **AIX**
  161. Supported Python versions are cPython 3.6+ and `PyPy <https://pypy.org/>`__.
  162. Latest psutil version supporting Python 2.7 is
  163. `psutil 6.1.1 <https://pypi.org/project/psutil/6.1.1/>`__.
  164. Example usages
  165. ==============
  166. This represents pretty much the whole psutil API.
  167. CPU
  168. ---
  169. .. code-block:: python
  170. >>> import psutil
  171. >>>
  172. >>> psutil.cpu_times()
  173. 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, guest_nice=0.0)
  174. >>>
  175. >>> for x in range(3):
  176. ... psutil.cpu_percent(interval=1)
  177. ...
  178. 4.0
  179. 5.9
  180. 3.8
  181. >>>
  182. >>> for x in range(3):
  183. ... psutil.cpu_percent(interval=1, percpu=True)
  184. ...
  185. [4.0, 6.9, 3.7, 9.2]
  186. [7.0, 8.5, 2.4, 2.1]
  187. [1.2, 9.0, 9.9, 7.2]
  188. >>>
  189. >>> for x in range(3):
  190. ... psutil.cpu_times_percent(interval=1, percpu=False)
  191. ...
  192. 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)
  193. 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)
  194. 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)
  195. >>>
  196. >>> psutil.cpu_count()
  197. 4
  198. >>> psutil.cpu_count(logical=False)
  199. 2
  200. >>>
  201. >>> psutil.cpu_stats()
  202. scpustats(ctx_switches=20455687, interrupts=6598984, soft_interrupts=2134212, syscalls=0)
  203. >>>
  204. >>> psutil.cpu_freq()
  205. scpufreq(current=931.42925, min=800.0, max=3500.0)
  206. >>>
  207. >>> psutil.getloadavg() # also on Windows (emulated)
  208. (3.14, 3.89, 4.67)
  209. Memory
  210. ------
  211. .. code-block:: python
  212. >>> psutil.virtual_memory()
  213. svmem(total=10367352832, available=6472179712, percent=37.6, used=8186245120, free=2181107712, active=4748992512, inactive=2758115328, buffers=790724608, cached=3500347392, shared=787554304)
  214. >>> psutil.swap_memory()
  215. sswap(total=2097147904, used=296128512, free=1801019392, percent=14.1, sin=304193536, sout=677842944)
  216. >>>
  217. Disks
  218. -----
  219. .. code-block:: python
  220. >>> psutil.disk_partitions()
  221. [sdiskpart(device='/dev/sda1', mountpoint='/', fstype='ext4', opts='rw,nosuid'),
  222. sdiskpart(device='/dev/sda2', mountpoint='/home', fstype='ext', opts='rw')]
  223. >>>
  224. >>> psutil.disk_usage('/')
  225. sdiskusage(total=21378641920, used=4809781248, free=15482871808, percent=22.5)
  226. >>>
  227. >>> psutil.disk_io_counters(perdisk=False)
  228. 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)
  229. >>>
  230. Network
  231. -------
  232. .. code-block:: python
  233. >>> psutil.net_io_counters(pernic=True)
  234. {'eth0': netio(bytes_sent=485291293, bytes_recv=6004858642, packets_sent=3251564, packets_recv=4787798, errin=0, errout=0, dropin=0, dropout=0),
  235. 'lo': netio(bytes_sent=2838627, bytes_recv=2838627, packets_sent=30567, packets_recv=30567, errin=0, errout=0, dropin=0, dropout=0)}
  236. >>>
  237. >>> psutil.net_connections(kind='tcp')
  238. [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),
  239. 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),
  240. ...]
  241. >>>
  242. >>> psutil.net_if_addrs()
  243. {'lo': [snicaddr(family=<AddressFamily.AF_INET: 2>, address='127.0.0.1', netmask='255.0.0.0', broadcast='127.0.0.1', ptp=None),
  244. snicaddr(family=<AddressFamily.AF_INET6: 10>, address='::1', netmask='ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff', broadcast=None, ptp=None),
  245. snicaddr(family=<AddressFamily.AF_LINK: 17>, address='00:00:00:00:00:00', netmask=None, broadcast='00:00:00:00:00:00', ptp=None)],
  246. 'wlan0': [snicaddr(family=<AddressFamily.AF_INET: 2>, address='192.168.1.3', netmask='255.255.255.0', broadcast='192.168.1.255', ptp=None),
  247. snicaddr(family=<AddressFamily.AF_INET6: 10>, address='fe80::c685:8ff:fe45:641%wlan0', netmask='ffff:ffff:ffff:ffff::', broadcast=None, ptp=None),
  248. snicaddr(family=<AddressFamily.AF_LINK: 17>, address='c4:85:08:45:06:41', netmask=None, broadcast='ff:ff:ff:ff:ff:ff', ptp=None)]}
  249. >>>
  250. >>> psutil.net_if_stats()
  251. {'lo': snicstats(isup=True, duplex=<NicDuplex.NIC_DUPLEX_UNKNOWN: 0>, speed=0, mtu=65536, flags='up,loopback,running'),
  252. 'wlan0': snicstats(isup=True, duplex=<NicDuplex.NIC_DUPLEX_FULL: 2>, speed=100, mtu=1500, flags='up,broadcast,running,multicast')}
  253. >>>
  254. Sensors
  255. -------
  256. .. code-block:: python
  257. >>> import psutil
  258. >>> psutil.sensors_temperatures()
  259. {'acpitz': [shwtemp(label='', current=47.0, high=103.0, critical=103.0)],
  260. 'asus': [shwtemp(label='', current=47.0, high=None, critical=None)],
  261. 'coretemp': [shwtemp(label='Physical id 0', current=52.0, high=100.0, critical=100.0),
  262. shwtemp(label='Core 0', current=45.0, high=100.0, critical=100.0)]}
  263. >>>
  264. >>> psutil.sensors_fans()
  265. {'asus': [sfan(label='cpu_fan', current=3200)]}
  266. >>>
  267. >>> psutil.sensors_battery()
  268. sbattery(percent=93, secsleft=16628, power_plugged=False)
  269. >>>
  270. Other system info
  271. -----------------
  272. .. code-block:: python
  273. >>> import psutil
  274. >>> psutil.users()
  275. [suser(name='giampaolo', terminal='pts/2', host='localhost', started=1340737536.0, pid=1352),
  276. suser(name='giampaolo', terminal='pts/3', host='localhost', started=1340737792.0, pid=1788)]
  277. >>>
  278. >>> psutil.boot_time()
  279. 1365519115.0
  280. >>>
  281. Process management
  282. ------------------
  283. .. code-block:: python
  284. >>> import psutil
  285. >>> psutil.pids()
  286. [1, 2, 3, 4, 5, 6, 7, 46, 48, 50, 51, 178, 182, 222, 223, 224, 268, 1215,
  287. 1216, 1220, 1221, 1243, 1244, 1301, 1601, 2237, 2355, 2637, 2774, 3932,
  288. 4176, 4177, 4185, 4187, 4189, 4225, 4243, 4245, 4263, 4282, 4306, 4311,
  289. 4312, 4313, 4314, 4337, 4339, 4357, 4358, 4363, 4383, 4395, 4408, 4433,
  290. 4443, 4445, 4446, 5167, 5234, 5235, 5252, 5318, 5424, 5644, 6987, 7054,
  291. 7055, 7071]
  292. >>>
  293. >>> p = psutil.Process(7055)
  294. >>> p
  295. psutil.Process(pid=7055, name='python3', status='running', started='09:04:44')
  296. >>> p.pid
  297. 7055
  298. >>> p.name()
  299. 'python3'
  300. >>> p.exe()
  301. '/usr/bin/python3'
  302. >>> p.cwd()
  303. '/home/giampaolo'
  304. >>> p.cmdline()
  305. ['/usr/bin/python3', 'main.py']
  306. >>>
  307. >>> p.ppid()
  308. 7054
  309. >>> p.parent()
  310. psutil.Process(pid=4699, name='bash', status='sleeping', started='09:06:44')
  311. >>> p.parents()
  312. [psutil.Process(pid=4699, name='bash', started='09:06:44'),
  313. psutil.Process(pid=4689, name='gnome-terminal-server', status='sleeping', started='0:06:44'),
  314. psutil.Process(pid=1, name='systemd', status='sleeping', started='05:56:55')]
  315. >>> p.children(recursive=True)
  316. [psutil.Process(pid=29835, name='python3', status='sleeping', started='11:45:38'),
  317. psutil.Process(pid=29836, name='python3', status='waking', started='11:43:39')]
  318. >>>
  319. >>> p.status()
  320. 'running'
  321. >>> p.create_time()
  322. 1267551141.5019531
  323. >>> p.terminal()
  324. '/dev/pts/0'
  325. >>>
  326. >>> p.username()
  327. 'giampaolo'
  328. >>> p.uids()
  329. puids(real=1000, effective=1000, saved=1000)
  330. >>> p.gids()
  331. pgids(real=1000, effective=1000, saved=1000)
  332. >>>
  333. >>> p.cpu_times()
  334. pcputimes(user=1.02, system=0.31, children_user=0.32, children_system=0.1, iowait=0.0)
  335. >>> p.cpu_percent(interval=1.0)
  336. 12.1
  337. >>> p.cpu_affinity()
  338. [0, 1, 2, 3]
  339. >>> p.cpu_affinity([0, 1]) # set
  340. >>> p.cpu_num()
  341. 1
  342. >>>
  343. >>> p.memory_info()
  344. pmem(rss=10915840, vms=67608576, shared=3313664, text=2310144, lib=0, data=7262208, dirty=0)
  345. >>> p.memory_full_info() # "real" USS memory usage (Linux, macOS, Win only)
  346. pfullmem(rss=10199040, vms=52133888, shared=3887104, text=2867200, lib=0, data=5967872, dirty=0, uss=6545408, pss=6872064, swap=0)
  347. >>> p.memory_percent()
  348. 0.7823
  349. >>> p.memory_maps()
  350. [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),
  351. 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),
  352. 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),
  353. 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),
  354. ...]
  355. >>>
  356. >>> p.io_counters()
  357. pio(read_count=478001, write_count=59371, read_bytes=700416, write_bytes=69632, read_chars=456232, write_chars=517543)
  358. >>>
  359. >>> p.open_files()
  360. [popenfile(path='/home/giampaolo/monit.py', fd=3, position=0, mode='r', flags=32768),
  361. popenfile(path='/var/log/monit.log', fd=4, position=235542, mode='a', flags=33793)]
  362. >>>
  363. >>> p.net_connections(kind='tcp')
  364. [pconn(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'),
  365. pconn(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')]
  366. >>>
  367. >>> p.threads()
  368. [pthread(id=5234, user_time=22.5, system_time=9.2891),
  369. pthread(id=5237, user_time=0.0707, system_time=1.1)]
  370. >>>
  371. >>> p.num_threads()
  372. 4
  373. >>> p.num_fds()
  374. 8
  375. >>> p.num_ctx_switches()
  376. pctxsw(voluntary=78, involuntary=19)
  377. >>>
  378. >>> p.nice()
  379. 0
  380. >>> p.nice(10) # set
  381. >>>
  382. >>> p.ionice(psutil.IOPRIO_CLASS_IDLE) # IO priority (Win and Linux only)
  383. >>> p.ionice()
  384. pionice(ioclass=<IOPriority.IOPRIO_CLASS_IDLE: 3>, value=0)
  385. >>>
  386. >>> p.rlimit(psutil.RLIMIT_NOFILE, (5, 5)) # set resource limits (Linux only)
  387. >>> p.rlimit(psutil.RLIMIT_NOFILE)
  388. (5, 5)
  389. >>>
  390. >>> p.environ()
  391. {'LC_PAPER': 'it_IT.UTF-8', 'SHELL': '/bin/bash', 'GREP_OPTIONS': '--color=auto',
  392. 'XDG_CONFIG_DIRS': '/etc/xdg/xdg-ubuntu:/usr/share/upstart/xdg:/etc/xdg',
  393. ...}
  394. >>>
  395. >>> p.as_dict()
  396. {'status': 'running', 'num_ctx_switches': pctxsw(voluntary=63, involuntary=1), 'pid': 5457, ...}
  397. >>> p.is_running()
  398. True
  399. >>> p.suspend()
  400. >>> p.resume()
  401. >>>
  402. >>> p.terminate()
  403. >>> p.kill()
  404. >>> p.wait(timeout=3)
  405. <Exitcode.EX_OK: 0>
  406. >>>
  407. >>> psutil.test()
  408. USER PID %CPU %MEM VSZ RSS TTY START TIME COMMAND
  409. root 1 0.0 0.0 24584 2240 Jun17 00:00 init
  410. root 2 0.0 0.0 0 0 Jun17 00:00 kthreadd
  411. ...
  412. giampaolo 31475 0.0 0.0 20760 3024 /dev/pts/0 Jun19 00:00 python2.4
  413. giampaolo 31721 0.0 2.2 773060 181896 00:04 10:30 chrome
  414. root 31763 0.0 0.0 0 0 00:05 00:00 kworker/0:1
  415. >>>
  416. Further process APIs
  417. --------------------
  418. .. code-block:: python
  419. >>> import psutil
  420. >>> for proc in psutil.process_iter(['pid', 'name']):
  421. ... print(proc.info)
  422. ...
  423. {'pid': 1, 'name': 'systemd'}
  424. {'pid': 2, 'name': 'kthreadd'}
  425. {'pid': 3, 'name': 'ksoftirqd/0'}
  426. ...
  427. >>>
  428. >>> psutil.pid_exists(3)
  429. True
  430. >>>
  431. >>> def on_terminate(proc):
  432. ... print("process {} terminated".format(proc))
  433. ...
  434. >>> # waits for multiple processes to terminate
  435. >>> gone, alive = psutil.wait_procs(procs_list, timeout=3, callback=on_terminate)
  436. >>>
  437. Heap info
  438. ---------
  439. .. code-block:: python
  440. >>> import psutil
  441. >>> psutil.heap_info()
  442. pheap(heap_used=5177792, mmap_used=819200)
  443. >>> psutil.heap_trim()
  444. See also `psleak <https://github.com/giampaolo/psleak>`__
  445. Windows services
  446. ----------------
  447. .. code-block:: python
  448. >>> list(psutil.win_service_iter())
  449. [<WindowsService(name='AeLookupSvc', display_name='Application Experience') at 38850096>,
  450. <WindowsService(name='ALG', display_name='Application Layer Gateway Service') at 38850128>,
  451. <WindowsService(name='APNMCP', display_name='Ask Update Service') at 38850160>,
  452. <WindowsService(name='AppIDSvc', display_name='Application Identity') at 38850192>,
  453. ...]
  454. >>> s = psutil.win_service_get('alg')
  455. >>> s.as_dict()
  456. {'binpath': 'C:\\Windows\\System32\\alg.exe',
  457. 'description': 'Provides support for 3rd party protocol plug-ins for Internet Connection Sharing',
  458. 'display_name': 'Application Layer Gateway Service',
  459. 'name': 'alg',
  460. 'pid': None,
  461. 'start_type': 'manual',
  462. 'status': 'stopped',
  463. 'username': 'NT AUTHORITY\\LocalService'}
  464. Projects using psutil
  465. =====================
  466. Here's some I find particularly interesting:
  467. - https://github.com/giampaolo/psleak
  468. - https://github.com/google/grr
  469. - https://github.com/facebook/osquery/
  470. - https://github.com/nicolargo/glances
  471. - https://github.com/aristocratos/bpytop
  472. - https://github.com/Jahaja/psdash
  473. - https://github.com/ajenti/ajenti
  474. - https://github.com/home-assistant/home-assistant/
  475. Portings
  476. ========
  477. - Go: https://github.com/shirou/gopsutil
  478. - C: https://github.com/hamon-in/cpslib
  479. - Rust: https://github.com/rust-psutil/rust-psutil
  480. - Nim: https://github.com/johnscillieri/psutil-nim