METADATA 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551
  1. Metadata-Version: 2.1
  2. Name: psutil
  3. Version: 7.0.0
  4. Summary: Cross-platform lib for process and system monitoring in Python. NOTE: the syntax of this script MUST be kept compatible with Python 2.7.
  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: Environment :: Win32 (MS Windows)
  14. Classifier: Intended Audience :: Developers
  15. Classifier: Intended Audience :: Information Technology
  16. Classifier: Intended Audience :: System Administrators
  17. Classifier: License :: OSI Approved :: BSD License
  18. Classifier: Operating System :: MacOS :: MacOS X
  19. Classifier: Operating System :: Microsoft :: Windows :: Windows 10
  20. Classifier: Operating System :: Microsoft :: Windows :: Windows 7
  21. Classifier: Operating System :: Microsoft :: Windows :: Windows 8
  22. Classifier: Operating System :: Microsoft :: Windows :: Windows 8.1
  23. Classifier: Operating System :: Microsoft :: Windows :: Windows Server 2003
  24. Classifier: Operating System :: Microsoft :: Windows :: Windows Server 2008
  25. Classifier: Operating System :: Microsoft :: Windows :: Windows Vista
  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 :: Hardware Drivers
  45. Classifier: Topic :: System :: Hardware
  46. Classifier: Topic :: System :: Monitoring
  47. Classifier: Topic :: System :: Networking :: Monitoring :: Hardware Watchdog
  48. Classifier: Topic :: System :: Networking :: Monitoring
  49. Classifier: Topic :: System :: Networking
  50. Classifier: Topic :: System :: Operating System
  51. Classifier: Topic :: System :: Systems Administration
  52. Classifier: Topic :: Utilities
  53. Requires-Python: >=3.6
  54. Description-Content-Type: text/x-rst
  55. License-File: LICENSE
  56. Provides-Extra: dev
  57. Requires-Dist: pytest ; extra == 'dev'
  58. Requires-Dist: pytest-xdist ; extra == 'dev'
  59. Requires-Dist: setuptools ; extra == 'dev'
  60. Requires-Dist: pywin32 ; extra == 'dev'
  61. Requires-Dist: wheel ; extra == 'dev'
  62. Requires-Dist: wmi ; extra == 'dev'
  63. Requires-Dist: abi3audit ; extra == 'dev'
  64. Requires-Dist: black ==24.10.0 ; extra == 'dev'
  65. Requires-Dist: check-manifest ; extra == 'dev'
  66. Requires-Dist: coverage ; extra == 'dev'
  67. Requires-Dist: packaging ; extra == 'dev'
  68. Requires-Dist: pylint ; extra == 'dev'
  69. Requires-Dist: pyperf ; extra == 'dev'
  70. Requires-Dist: pypinfo ; extra == 'dev'
  71. Requires-Dist: pytest-cov ; extra == 'dev'
  72. Requires-Dist: requests ; extra == 'dev'
  73. Requires-Dist: rstcheck ; extra == 'dev'
  74. Requires-Dist: ruff ; extra == 'dev'
  75. Requires-Dist: sphinx ; extra == 'dev'
  76. Requires-Dist: sphinx-rtd-theme ; extra == 'dev'
  77. Requires-Dist: toml-sort ; extra == 'dev'
  78. Requires-Dist: twine ; extra == 'dev'
  79. Requires-Dist: virtualenv ; extra == 'dev'
  80. Requires-Dist: vulture ; extra == 'dev'
  81. Requires-Dist: pyreadline ; extra == 'dev'
  82. Requires-Dist: pdbpp ; extra == 'dev'
  83. Provides-Extra: test
  84. Requires-Dist: pytest ; extra == 'test'
  85. Requires-Dist: pytest-xdist ; extra == 'test'
  86. Requires-Dist: setuptools ; extra == 'test'
  87. Requires-Dist: pywin32 ; extra == 'test'
  88. Requires-Dist: wheel ; extra == 'test'
  89. Requires-Dist: wmi ; extra == 'test'
  90. | |downloads| |stars| |forks| |contributors| |coverage|
  91. | |version| |py-versions| |packages| |license|
  92. | |github-actions-wheels| |github-actions-bsd| |doc| |twitter| |tidelift|
  93. .. |downloads| image:: https://img.shields.io/pypi/dm/psutil.svg
  94. :target: https://pepy.tech/project/psutil
  95. :alt: Downloads
  96. .. |stars| image:: https://img.shields.io/github/stars/giampaolo/psutil.svg
  97. :target: https://github.com/giampaolo/psutil/stargazers
  98. :alt: Github stars
  99. .. |forks| image:: https://img.shields.io/github/forks/giampaolo/psutil.svg
  100. :target: https://github.com/giampaolo/psutil/network/members
  101. :alt: Github forks
  102. .. |contributors| image:: https://img.shields.io/github/contributors/giampaolo/psutil.svg
  103. :target: https://github.com/giampaolo/psutil/graphs/contributors
  104. :alt: Contributors
  105. .. |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
  106. :target: https://github.com/giampaolo/psutil/actions?query=workflow%3Abuild
  107. :alt: Linux, macOS, Windows
  108. .. |github-actions-bsd| image:: https://img.shields.io/github/actions/workflow/status/giampaolo/psutil/.github/workflows/bsd.yml.svg?label=FreeBSD,%20NetBSD,%20OpenBSD
  109. :target: https://github.com/giampaolo/psutil/actions?query=workflow%3Absd-tests
  110. :alt: FreeBSD, NetBSD, OpenBSD
  111. .. |coverage| image:: https://coveralls.io/repos/github/giampaolo/psutil/badge.svg?branch=master
  112. :target: https://coveralls.io/github/giampaolo/psutil?branch=master
  113. :alt: Test coverage (coverall.io)
  114. .. |doc| image:: https://readthedocs.org/projects/psutil/badge/?version=latest
  115. :target: https://psutil.readthedocs.io/en/latest/
  116. :alt: Documentation Status
  117. .. |version| image:: https://img.shields.io/pypi/v/psutil.svg?label=pypi
  118. :target: https://pypi.org/project/psutil
  119. :alt: Latest version
  120. .. |py-versions| image:: https://img.shields.io/pypi/pyversions/psutil.svg
  121. :alt: Supported Python versions
  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.svg?label=follow&style=flat&logo=twitter&logoColor=4FADFF
  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. Funding
  165. =======
  166. While psutil is free software and will always be, the project would benefit
  167. immensely from some funding.
  168. Keeping up with bug reports and maintenance has become hardly sustainable for
  169. me alone in terms of time.
  170. If you're a company that's making significant use of psutil you can consider
  171. becoming a sponsor via `GitHub Sponsors <https://github.com/sponsors/giampaolo>`__,
  172. `Open Collective <https://opencollective.com/psutil>`__ or
  173. `PayPal <https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=A9ZS7PKKRM3S8>`__
  174. and have your logo displayed in here and psutil `doc <https://psutil.readthedocs.io>`__.
  175. Sponsors
  176. ========
  177. .. image:: https://github.com/giampaolo/psutil/raw/master/docs/_static/tidelift-logo.png
  178. :width: 200
  179. :alt: Alternative text
  180. `Add your logo <https://github.com/sponsors/giampaolo>`__.
  181. Example usages
  182. ==============
  183. This represents pretty much the whole psutil API.
  184. CPU
  185. ---
  186. .. code-block:: python
  187. >>> import psutil
  188. >>>
  189. >>> psutil.cpu_times()
  190. 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)
  191. >>>
  192. >>> for x in range(3):
  193. ... psutil.cpu_percent(interval=1)
  194. ...
  195. 4.0
  196. 5.9
  197. 3.8
  198. >>>
  199. >>> for x in range(3):
  200. ... psutil.cpu_percent(interval=1, percpu=True)
  201. ...
  202. [4.0, 6.9, 3.7, 9.2]
  203. [7.0, 8.5, 2.4, 2.1]
  204. [1.2, 9.0, 9.9, 7.2]
  205. >>>
  206. >>> for x in range(3):
  207. ... psutil.cpu_times_percent(interval=1, percpu=False)
  208. ...
  209. 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)
  210. 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)
  211. 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)
  212. >>>
  213. >>> psutil.cpu_count()
  214. 4
  215. >>> psutil.cpu_count(logical=False)
  216. 2
  217. >>>
  218. >>> psutil.cpu_stats()
  219. scpustats(ctx_switches=20455687, interrupts=6598984, soft_interrupts=2134212, syscalls=0)
  220. >>>
  221. >>> psutil.cpu_freq()
  222. scpufreq(current=931.42925, min=800.0, max=3500.0)
  223. >>>
  224. >>> psutil.getloadavg() # also on Windows (emulated)
  225. (3.14, 3.89, 4.67)
  226. Memory
  227. ------
  228. .. code-block:: python
  229. >>> psutil.virtual_memory()
  230. svmem(total=10367352832, available=6472179712, percent=37.6, used=8186245120, free=2181107712, active=4748992512, inactive=2758115328, buffers=790724608, cached=3500347392, shared=787554304)
  231. >>> psutil.swap_memory()
  232. sswap(total=2097147904, used=296128512, free=1801019392, percent=14.1, sin=304193536, sout=677842944)
  233. >>>
  234. Disks
  235. -----
  236. .. code-block:: python
  237. >>> psutil.disk_partitions()
  238. [sdiskpart(device='/dev/sda1', mountpoint='/', fstype='ext4', opts='rw,nosuid'),
  239. sdiskpart(device='/dev/sda2', mountpoint='/home', fstype='ext', opts='rw')]
  240. >>>
  241. >>> psutil.disk_usage('/')
  242. sdiskusage(total=21378641920, used=4809781248, free=15482871808, percent=22.5)
  243. >>>
  244. >>> psutil.disk_io_counters(perdisk=False)
  245. 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)
  246. >>>
  247. Network
  248. -------
  249. .. code-block:: python
  250. >>> psutil.net_io_counters(pernic=True)
  251. {'eth0': netio(bytes_sent=485291293, bytes_recv=6004858642, packets_sent=3251564, packets_recv=4787798, errin=0, errout=0, dropin=0, dropout=0),
  252. 'lo': netio(bytes_sent=2838627, bytes_recv=2838627, packets_sent=30567, packets_recv=30567, errin=0, errout=0, dropin=0, dropout=0)}
  253. >>>
  254. >>> psutil.net_connections(kind='tcp')
  255. [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),
  256. 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),
  257. ...]
  258. >>>
  259. >>> psutil.net_if_addrs()
  260. {'lo': [snicaddr(family=<AddressFamily.AF_INET: 2>, address='127.0.0.1', netmask='255.0.0.0', broadcast='127.0.0.1', ptp=None),
  261. snicaddr(family=<AddressFamily.AF_INET6: 10>, address='::1', netmask='ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff', broadcast=None, ptp=None),
  262. snicaddr(family=<AddressFamily.AF_LINK: 17>, address='00:00:00:00:00:00', netmask=None, broadcast='00:00:00:00:00:00', ptp=None)],
  263. 'wlan0': [snicaddr(family=<AddressFamily.AF_INET: 2>, address='192.168.1.3', netmask='255.255.255.0', broadcast='192.168.1.255', ptp=None),
  264. snicaddr(family=<AddressFamily.AF_INET6: 10>, address='fe80::c685:8ff:fe45:641%wlan0', netmask='ffff:ffff:ffff:ffff::', broadcast=None, ptp=None),
  265. snicaddr(family=<AddressFamily.AF_LINK: 17>, address='c4:85:08:45:06:41', netmask=None, broadcast='ff:ff:ff:ff:ff:ff', ptp=None)]}
  266. >>>
  267. >>> psutil.net_if_stats()
  268. {'lo': snicstats(isup=True, duplex=<NicDuplex.NIC_DUPLEX_UNKNOWN: 0>, speed=0, mtu=65536, flags='up,loopback,running'),
  269. 'wlan0': snicstats(isup=True, duplex=<NicDuplex.NIC_DUPLEX_FULL: 2>, speed=100, mtu=1500, flags='up,broadcast,running,multicast')}
  270. >>>
  271. Sensors
  272. -------
  273. .. code-block:: python
  274. >>> import psutil
  275. >>> psutil.sensors_temperatures()
  276. {'acpitz': [shwtemp(label='', current=47.0, high=103.0, critical=103.0)],
  277. 'asus': [shwtemp(label='', current=47.0, high=None, critical=None)],
  278. 'coretemp': [shwtemp(label='Physical id 0', current=52.0, high=100.0, critical=100.0),
  279. shwtemp(label='Core 0', current=45.0, high=100.0, critical=100.0)]}
  280. >>>
  281. >>> psutil.sensors_fans()
  282. {'asus': [sfan(label='cpu_fan', current=3200)]}
  283. >>>
  284. >>> psutil.sensors_battery()
  285. sbattery(percent=93, secsleft=16628, power_plugged=False)
  286. >>>
  287. Other system info
  288. -----------------
  289. .. code-block:: python
  290. >>> import psutil
  291. >>> psutil.users()
  292. [suser(name='giampaolo', terminal='pts/2', host='localhost', started=1340737536.0, pid=1352),
  293. suser(name='giampaolo', terminal='pts/3', host='localhost', started=1340737792.0, pid=1788)]
  294. >>>
  295. >>> psutil.boot_time()
  296. 1365519115.0
  297. >>>
  298. Process management
  299. ------------------
  300. .. code-block:: python
  301. >>> import psutil
  302. >>> psutil.pids()
  303. [1, 2, 3, 4, 5, 6, 7, 46, 48, 50, 51, 178, 182, 222, 223, 224, 268, 1215,
  304. 1216, 1220, 1221, 1243, 1244, 1301, 1601, 2237, 2355, 2637, 2774, 3932,
  305. 4176, 4177, 4185, 4187, 4189, 4225, 4243, 4245, 4263, 4282, 4306, 4311,
  306. 4312, 4313, 4314, 4337, 4339, 4357, 4358, 4363, 4383, 4395, 4408, 4433,
  307. 4443, 4445, 4446, 5167, 5234, 5235, 5252, 5318, 5424, 5644, 6987, 7054,
  308. 7055, 7071]
  309. >>>
  310. >>> p = psutil.Process(7055)
  311. >>> p
  312. psutil.Process(pid=7055, name='python3', status='running', started='09:04:44')
  313. >>> p.pid
  314. 7055
  315. >>> p.name()
  316. 'python3'
  317. >>> p.exe()
  318. '/usr/bin/python3'
  319. >>> p.cwd()
  320. '/home/giampaolo'
  321. >>> p.cmdline()
  322. ['/usr/bin/python3', 'main.py']
  323. >>>
  324. >>> p.ppid()
  325. 7054
  326. >>> p.parent()
  327. psutil.Process(pid=4699, name='bash', status='sleeping', started='09:06:44')
  328. >>> p.parents()
  329. [psutil.Process(pid=4699, name='bash', started='09:06:44'),
  330. psutil.Process(pid=4689, name='gnome-terminal-server', status='sleeping', started='0:06:44'),
  331. psutil.Process(pid=1, name='systemd', status='sleeping', started='05:56:55')]
  332. >>> p.children(recursive=True)
  333. [psutil.Process(pid=29835, name='python3', status='sleeping', started='11:45:38'),
  334. psutil.Process(pid=29836, name='python3', status='waking', started='11:43:39')]
  335. >>>
  336. >>> p.status()
  337. 'running'
  338. >>> p.create_time()
  339. 1267551141.5019531
  340. >>> p.terminal()
  341. '/dev/pts/0'
  342. >>>
  343. >>> p.username()
  344. 'giampaolo'
  345. >>> p.uids()
  346. puids(real=1000, effective=1000, saved=1000)
  347. >>> p.gids()
  348. pgids(real=1000, effective=1000, saved=1000)
  349. >>>
  350. >>> p.cpu_times()
  351. pcputimes(user=1.02, system=0.31, children_user=0.32, children_system=0.1, iowait=0.0)
  352. >>> p.cpu_percent(interval=1.0)
  353. 12.1
  354. >>> p.cpu_affinity()
  355. [0, 1, 2, 3]
  356. >>> p.cpu_affinity([0, 1]) # set
  357. >>> p.cpu_num()
  358. 1
  359. >>>
  360. >>> p.memory_info()
  361. pmem(rss=10915840, vms=67608576, shared=3313664, text=2310144, lib=0, data=7262208, dirty=0)
  362. >>> p.memory_full_info() # "real" USS memory usage (Linux, macOS, Win only)
  363. pfullmem(rss=10199040, vms=52133888, shared=3887104, text=2867200, lib=0, data=5967872, dirty=0, uss=6545408, pss=6872064, swap=0)
  364. >>> p.memory_percent()
  365. 0.7823
  366. >>> p.memory_maps()
  367. [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),
  368. 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),
  369. 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),
  370. 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),
  371. ...]
  372. >>>
  373. >>> p.io_counters()
  374. pio(read_count=478001, write_count=59371, read_bytes=700416, write_bytes=69632, read_chars=456232, write_chars=517543)
  375. >>>
  376. >>> p.open_files()
  377. [popenfile(path='/home/giampaolo/monit.py', fd=3, position=0, mode='r', flags=32768),
  378. popenfile(path='/var/log/monit.log', fd=4, position=235542, mode='a', flags=33793)]
  379. >>>
  380. >>> p.net_connections(kind='tcp')
  381. [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'),
  382. 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')]
  383. >>>
  384. >>> p.threads()
  385. [pthread(id=5234, user_time=22.5, system_time=9.2891),
  386. pthread(id=5237, user_time=0.0707, system_time=1.1)]
  387. >>>
  388. >>> p.num_threads()
  389. 4
  390. >>> p.num_fds()
  391. 8
  392. >>> p.num_ctx_switches()
  393. pctxsw(voluntary=78, involuntary=19)
  394. >>>
  395. >>> p.nice()
  396. 0
  397. >>> p.nice(10) # set
  398. >>>
  399. >>> p.ionice(psutil.IOPRIO_CLASS_IDLE) # IO priority (Win and Linux only)
  400. >>> p.ionice()
  401. pionice(ioclass=<IOPriority.IOPRIO_CLASS_IDLE: 3>, value=0)
  402. >>>
  403. >>> p.rlimit(psutil.RLIMIT_NOFILE, (5, 5)) # set resource limits (Linux only)
  404. >>> p.rlimit(psutil.RLIMIT_NOFILE)
  405. (5, 5)
  406. >>>
  407. >>> p.environ()
  408. {'LC_PAPER': 'it_IT.UTF-8', 'SHELL': '/bin/bash', 'GREP_OPTIONS': '--color=auto',
  409. 'XDG_CONFIG_DIRS': '/etc/xdg/xdg-ubuntu:/usr/share/upstart/xdg:/etc/xdg',
  410. ...}
  411. >>>
  412. >>> p.as_dict()
  413. {'status': 'running', 'num_ctx_switches': pctxsw(voluntary=63, involuntary=1), 'pid': 5457, ...}
  414. >>> p.is_running()
  415. True
  416. >>> p.suspend()
  417. >>> p.resume()
  418. >>>
  419. >>> p.terminate()
  420. >>> p.kill()
  421. >>> p.wait(timeout=3)
  422. <Exitcode.EX_OK: 0>
  423. >>>
  424. >>> psutil.test()
  425. USER PID %CPU %MEM VSZ RSS TTY START TIME COMMAND
  426. root 1 0.0 0.0 24584 2240 Jun17 00:00 init
  427. root 2 0.0 0.0 0 0 Jun17 00:00 kthreadd
  428. ...
  429. giampaolo 31475 0.0 0.0 20760 3024 /dev/pts/0 Jun19 00:00 python2.4
  430. giampaolo 31721 0.0 2.2 773060 181896 00:04 10:30 chrome
  431. root 31763 0.0 0.0 0 0 00:05 00:00 kworker/0:1
  432. >>>
  433. Further process APIs
  434. --------------------
  435. .. code-block:: python
  436. >>> import psutil
  437. >>> for proc in psutil.process_iter(['pid', 'name']):
  438. ... print(proc.info)
  439. ...
  440. {'pid': 1, 'name': 'systemd'}
  441. {'pid': 2, 'name': 'kthreadd'}
  442. {'pid': 3, 'name': 'ksoftirqd/0'}
  443. ...
  444. >>>
  445. >>> psutil.pid_exists(3)
  446. True
  447. >>>
  448. >>> def on_terminate(proc):
  449. ... print("process {} terminated".format(proc))
  450. ...
  451. >>> # waits for multiple processes to terminate
  452. >>> gone, alive = psutil.wait_procs(procs_list, timeout=3, callback=on_terminate)
  453. >>>
  454. Windows services
  455. ----------------
  456. .. code-block:: python
  457. >>> list(psutil.win_service_iter())
  458. [<WindowsService(name='AeLookupSvc', display_name='Application Experience') at 38850096>,
  459. <WindowsService(name='ALG', display_name='Application Layer Gateway Service') at 38850128>,
  460. <WindowsService(name='APNMCP', display_name='Ask Update Service') at 38850160>,
  461. <WindowsService(name='AppIDSvc', display_name='Application Identity') at 38850192>,
  462. ...]
  463. >>> s = psutil.win_service_get('alg')
  464. >>> s.as_dict()
  465. {'binpath': 'C:\\Windows\\System32\\alg.exe',
  466. 'description': 'Provides support for 3rd party protocol plug-ins for Internet Connection Sharing',
  467. 'display_name': 'Application Layer Gateway Service',
  468. 'name': 'alg',
  469. 'pid': None,
  470. 'start_type': 'manual',
  471. 'status': 'stopped',
  472. 'username': 'NT AUTHORITY\\LocalService'}
  473. Projects using psutil
  474. =====================
  475. Here's some I find particularly interesting:
  476. - https://github.com/google/grr
  477. - https://github.com/facebook/osquery/
  478. - https://github.com/nicolargo/glances
  479. - https://github.com/aristocratos/bpytop
  480. - https://github.com/Jahaja/psdash
  481. - https://github.com/ajenti/ajenti
  482. - https://github.com/home-assistant/home-assistant/
  483. Portings
  484. ========
  485. - Go: https://github.com/shirou/gopsutil
  486. - C: https://github.com/hamon-in/cpslib
  487. - Rust: https://github.com/rust-psutil/rust-psutil
  488. - Nim: https://github.com/johnscillieri/psutil-nim