METADATA 22 KB

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