METADATA 21 KB

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