grthtrhthjhtyjytjytkergtrhtrjytjerhrfh4:24 29/09/2026a MÝ_]yã@sfdZddlZddlZddlZddlZddlmmZddl m Z ddl m Z ddl m Z ddl mZddl mZdd l mZdd l mZdd l mZdd l mZdd l mZddl mZddl mZddl mZddl mZddl mZddl mZddl mZddlmZddlm Z ddlm!Z!ddlm"Z"gZ#e�rzej$e j%ej&e j'ej(e j)ej*e j+ej,e j-ej.e j/ej0e j1iZ2n~e�r¾ej$e j%ej(e j)ej*e j+ej3e j-ej,e j-ej&e j4ej5e j'iZ2n:e�røej$e j%ej(e j)ej*e j+ej,e j-ej&e j4ej5e j'iZ2ej6e j7ej8e j9ej:e j;eje j?ej@e jAejBe jCejDe jEejFe jGejHe jIejJe jKejLe jMi ZNe O¡ZPejQZQeRedƒZSeRedƒZTeRedƒZUeRedƒZVeWdddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4�ZXe d5gd6¢ƒZYe d7gd8¢ƒZZe d9gd:¢ƒZ[e[Z\e d;gd<¢ƒZ]e d=d>ƒZ^e d?d@ƒZ_e�r2e dAgdB¢ƒZ`ne dAgdC¢ƒZ`dDdE„ZadFdG„ZbdHdI„ZceS�rhdJd„ZdndKd„ZddLed_edMdN„Zfe�sŠe�r”dOdP„ZgndQdP„ZgdRdS„ZhdrdTdU„ZiejjZjejkZkejlZlejmZmdVdW„ZndXdY„Zoe�rôdZd[„Zpd\d]„Zqd^d_„Zrd`da„Zsdbdc„Zteddde„ƒZudfdg„Zve�s$e�r.dhdi„ZwnejwZwdjdk„Zxdldm„Zyejzdndo„ƒZ{Gdpdq„dqe|ƒZ}dS)sz5FreeBSD, OpenBSD and NetBSD platforms implementation.éN)Ú namedtuple)Ú defaultdicté)Ú_common)Ú_psposix)Ú _psutil_bsd)Ú _psutil_posix)Ú AccessDenied)Ú conn_tmap)Úconn_to_ntuple)ÚFREEBSD)Úmemoize)Úmemoize_when_activated)ÚNETBSD)Ú NoSuchProcess)ÚOPENBSD)Ú usage_percent)Ú ZombieProcess)ÚFileNotFoundError)ÚPermissionError)ÚProcessLookupError)ÚwhichÚ per_cpu_timesÚproc_num_threadsÚproc_open_filesÚ proc_num_fdséééééééé é é é é ééééééééééé)ÚppidÚstatusÚreal_uidÚ effective_uidÚ saved_uidÚreal_gidÚ effective_gidÚ saved_gidÚttynrÚ create_timeÚctx_switches_volÚctx_switches_unvolÚ read_io_countÚwrite_io_countÚ user_timeÚsys_timeÚ ch_user_timeÚ ch_sys_timeÚrssÚvmsÚmemtextÚmemdataÚmemstackÚcpunumÚnameÚsvmem) ÚtotalZ availableÚpercentÚusedÚfreeÚactiveÚinactiveÚbuffersÚcachedÚsharedÚwiredÚ scputimes©ÚuserÚniceÚsystemÚidleÚirqÚpmem)rErFÚtextÚdataÚstackÚ pcputimes)rYr[Ú children_userÚchildren_systemÚ pmmap_groupedú*path rss, private, ref_count, shadow_countÚ pmmap_extú6addr, perms path rss, private, ref_count, shadow_countÚsdiskio)Ú read_countÚ write_countÚ read_bytesÚ write_bytesZ read_timeZ write_timeZ busy_time)rjrkrlrmc CsØt ¡}|\}}}}}}}}tr’tddƒ�X} | D]B} |  d¡rTt|  ¡dƒd}q0|  d¡r0t|  ¡dƒd}q0Wdƒn1sˆ0Y|||} |||} t|| |dd�} t|| | | |||||||ƒ S) z&System virtual memory as a namedtuple.z /proc/meminfoÚrbsBuffers:ris MemShared:N©Zround_) ÚcextZ virtual_memrÚopenÚ startswithÚintÚsplitrrL)ZmemrMrPrQrRrVrTrSrUÚfÚlineZavailrOrN©rwú3/usr/lib64/python3.9/site-packages/psutil/_psbsd.pyÚvirtual_memory³s   4    ÿrycCs4t ¡\}}}}}t||dd�}t ||||||¡S)z@System swap memory as (total, used, free, sin, sout) namedtuple.rro)rpZswap_memrrZsswap)rMrOrPZsinZsoutrNrwrwrxÚ swap_memoryÇsrzcCs"t ¡\}}}}}t|||||ƒS)z+Return system per-CPU times as a namedtuple)rpÚ cpu_timesrWrXrwrwrxr{Ósr{cCs>g}t ¡D],}|\}}}}}t|||||ƒ}| |¡q |S)ú'Return system CPU times as a namedtuple)rprrWÚappend)ÚretZcpu_trYrZr[r\r]ÚitemrwrwrxrÚs   cCs.tƒdkrtƒgStjr tdƒ‚dt_tƒgS)r|rú&supported only starting from FreeBSD 8T)Úcpu_count_logicalr{rÚ __called__ÚNotImplementedErrorrwrwrwrxrês  FcCst ¡S)z0Return the number of logical CPUs in the system.)rpr�rwrwrwrxr�ösr�cCstƒdkrdSdS)Nr)r�rwrwrwrxÚcpu_count_physicalüsr„cCs€d}t ¡}|durj| d¡}|dkrj|d|d…}t |¡}zt| d¡ƒpRd}W| ¡n | ¡0|s|tƒdkr|dS|S)z1Return the number of physical CPUs in the system.Nz éÿÿÿÿr#zgroup/children/group/cpur) rpZcpu_count_physÚrfindÚETZ fromstringÚlenÚfindallÚclearr�)r~ÚsÚindexÚrootrwrwrxr„s   c Cs¬trt ¡\}}}}}n„tr‚t ¡\}}}}}}}tddƒ�4}|D]}| d¡rBt| ¡dƒ}qBWdƒqœ1sv0Yntrœt ¡\}}}}}}}t   ||||¡S)z*Return various CPU stats as a named tuple.z /proc/statrnsintrrN) r rpÚ cpu_statsrrqrrrsrtrrZ scpustats) ZctxswZintrsZ soft_intrsZsyscallsZtrapsZfaultsZforksrurvrwrwrxrŽs ÿ  2ÿrŽc CsLg}t ¡}|D]6}|\}}}}d}} t |||||| ¡} | | ¡q|S)z”Return mounted disk partitions as a list of namedtuples. 'all' argument is ignored, see: https://github.com/giampaolo/psutil/issues/906 N)rpÚdisk_partitionsrZ sdiskpartr}) ÚallÚretlistZ partitionsÚ partitionZdeviceZ mountpointZfstypeZoptsZmaxfileZmaxpathÚntuplerwrwrxr�?s  ÿ r�c Csžtƒ ¡}i}|D]†}z&t |¡}t |¡}t |¡\}}Wn2tyn}z|jtjkrZ‚WYd}~qd}~00t t dƒr„t   |¡}t   ||||¡||<q|S)z)Get NIC stats (isup, duplex, speed, mtu).NÚ NicDuplex) Únet_io_countersÚkeysÚ cext_posixZ net_if_mtuZnet_if_is_runningZnet_if_duplex_speedÚOSErrorÚerrnoZENODEVÚhasattrrr”Z snicstats)Únamesr~rKZmtuZisupZduplexZspeedÚerrrwrwrxÚ net_if_stats\s      r�c Cstrrg}tƒD]^}zt|ƒ |¡}Wnttfy>YqYq0|D]&}t|ƒ}| |¡| tj |Ž¡qDq|S|tj vrœt d|d  dd„t Dƒ¡fƒ‚t |\}}t ƒ}tr¾t d¡}nt ¡}|D]F}|\} } } } } }}| |vrÊ| |vrÊt| | | | | |t|ƒ}| |¡qÊt|ƒS)z System-wide network connections.ú+invalid %r kind argument; choose between %sú, cSsg|] }t|ƒ‘qSrw©Úrepr©Ú.0ÚxrwrwrxÚ ‚óz#net_connections..r…)rÚpidsÚProcessÚ connectionsrrÚlistr}rZsconnr Ú ValueErrorÚjoinÚsetrrpÚnet_connectionsr Ú TCP_STATUSESÚadd)Úkindr~ÚpidZconsZconnÚfamiliesÚtypesÚrawlistrÚfdÚfamÚtypeÚladdrÚraddrr4Úntrwrwrxr®ps:    ÿ  ÿ r®cCsbzt ¡\}}}Wnty&YdS0|dk}|rYqYn0|r¼z t| d¡d d¡dƒ}Wnttfy~d}Yn0z t| d¡d d¡dƒ}Wnttfyºd}Yn0|  t   |||¡¡q|S)zªReturn frequency metrics for CPUs. As of Dec 2018 only CPU 0 appears to be supported by FreeBSD and all other cores match the frequency of CPU 0. ú r…ú/rN) r�r¾rpZ cpu_frequencyrƒrsrtÚ IndexErrorr«r}rZscpufreq)r~r¿rÀrÁZavailable_freqZmin_freqZmax_freqrwrwrxÚcpu_freq»s$       rÆcCst ¡S)z:The system boot time expressed in seconds since the epoch.)rpÚ boot_timerwrwrwrxrÇÙsrÇc Cs^g}t ¡}|D]H}|\}}}}}|dkr.d}|dkr8qt ||pDd|||¡}| |¡q|S)z:Return currently connected users as a list of namedtuples.r…Nú~)rpÚusersrZsuserr}) r‘rµrrYZttyÚhostnameZtstampr²r»rwrwrxrÉÞs rÉcCs@ztdƒ ¡Wn&ty$YdSty6YdS0dSdS)NrFT)r¨rKrr rwrwrwrxÚ _pid_0_existsós  rËcCs*t ¡}tr&d|vr&tƒr&| dd¡|S)z7Returns a list of PIDs currently running on the system.r)rpr§rrËÚinsert)r~rwrwrxr§ÿs r§cCs t |¡}|s|tƒvSdSdS)zReturn True if pid exists.TN)rÚ pid_existsr§)r²ÚexistsrwrwrxrÍ s  rÍcCs8zt |¡td}|tjkWSty2YdS0dS)Nr4F)rpÚproc_oneshot_infoÚkinfo_proc_mapÚSZOMBÚ Exception)r²ÚstrwrwrxÚ is_zombies   rÔcst ˆ¡‡fdd„ƒ}|S)z`Decorator which translates bare OSError exceptions into NoSuchProcess and AccessDenied. cs²zˆ|g|¢Ri|¤ŽWStyVt|jƒrDt|j|j|jƒ‚nt|j|jƒ‚YnXtytt|j|jƒ‚Yn:t y¬|jdkr¦dt ƒvr¤t|j|jƒ‚n‚‚Yn0dS©Nr) rrÔr²rÚ_nameÚ_ppidrrr r˜r§)ÚselfÚargsÚkwargs©ÚfunrwrxÚwrapper#s      z wrap_exceptions..wrapper)Ú functoolsÚwraps)rÜrÝrwrÛrxÚwrap_exceptionssràc cspz dVWn`ttfyLt|jƒr:t|j|j|jƒ‚nt|j|jƒ‚Yn tyjt |j|jƒ‚Yn0dS)z8Same as above, for routines relying on reading /proc fs.N) rrrÔr²rrÖr×rrr )ÚinstrwrwrxÚwrap_exceptions_procfs8s   râc@sàeZdZdZgd¢Zdd„Zdd„Zeedd„ƒƒZ d d „Z d d „Z ed d„ƒZ edd„ƒZ edd„ƒZedd„ƒZedd„ƒZedd„ƒZedd„ƒZedd„ƒZedd„ƒZerÀedd „ƒZed!d"„ƒZeZed#d$„ƒZed%d&„ƒZed'd(„ƒZed)d*„ƒZedLd,d-„ƒZedMd/d0„ƒZed1d2„ƒZed3d4„ƒZ ed5d6„ƒZ!ed7d8„ƒZ"ed9d:„ƒZ#e$d;d<ƒZ%e$d;d=ƒZ&d>d?„Z'e(�rˆed@dA„ƒZ)ne'Z)e*�r edBdC„ƒZ+ne'Z+e�rÜedDdE„ƒZ,edFdG„ƒZ-edHdI„ƒZ.edNdJdK„ƒZ/d.S)Or¨z1Wrapper class around underlying C implementation.)r²rÖr×Ú_cachecCs||_d|_d|_dS©N)r²rÖr×)rØr²rwrwrxÚ__init__NszProcess.__init__cCst |j¡dS)z+Raise NSP if the process disappeared on us.N)rpÚ proc_namer²©rØrwrwrxÚ _assert_aliveSszProcess._assert_alivecCst |j¡}|S)z;Retrieves multiple process info in one shot as a raw tuple.)rprÏr²©rØr~rwrwrxÚoneshotYs zProcess.oneshotcCs|j |¡dSrä)rêZcache_activaterçrwrwrxÚ oneshot_enteraszProcess.oneshot_entercCs|j |¡dSrä)rêZcache_deactivaterçrwrwrxÚ oneshot_exitdszProcess.oneshot_exitcCs(| ¡td}|dur|St |j¡S)NrK)rêrÐrprær²)rØrKrwrwrxrKgsz Process.namecCsŽtr|jdkrdSt |j¡Strj|jdkr0dSt|ƒ� t d|j¡WdƒS1s^0Yn | ¡}|r†t |dƒp„dSdSdS)NrÚz /proc/%s/exe) r r²rpZproc_exerrâÚosÚreadlinkÚcmdliner)rØrðrwrwrxÚexels    0z Process.exec Cs¸tr|jdkrgStr¨zt |j¡WSty¤}zh|jtjkrŽt|jƒr^t |j|j |j ƒ‚q�t |jƒs|t |j|j |j ƒ‚q�gWYd}~Sn‚WYd}~q´d}~00n t |j¡SdSrÕ)rr²rrpZ proc_cmdliner˜r™ÚEINVALrÔrrÖr×rÍr)rØrœrwrwrxrð„s   zProcess.cmdlinecCs t |j¡Srä)rpZ proc_environr²rçrwrwrxÚenvironžszProcess.environcCs<| ¡td}t ¡}z ||WSty6YdS0dS)Nr;)rêrÐrZget_terminal_mapÚKeyError)rØZtty_nrZtmaprwrwrxÚterminal¢s   zProcess.terminalcCs| ¡td|_|jS)Nr3)rêrÐr×rçrwrwrxr3«sz Process.ppidcCs.| ¡}t |td|td|td¡S)Nr5r6r7)rêrZpuidsrЩrØZrawtuplerwrwrxÚuids°s    ýz Process.uidscCs.| ¡}t |td|td|td¡S)Nr8r9r:)rêrZpgidsrÐrörwrwrxÚgids¸s    ýz Process.gidscCs8| ¡}t |td|td|td|td¡S)NrArBrCrD)rêrrbrÐrörwrwrxr{Às    üzProcess.cpu_timescCs| ¡tdS)NrJ©rêrÐrçrwrwrxÚcpu_numÊszProcess.cpu_numcCs@| ¡}t|td|td|td|td|tdƒS)NrErFrGrHrI)rêr^rÐrörwrwrxÚ memory_infoÎs     ûzProcess.memory_infocCs| ¡tdS)Nr<rùrçrwrwrxr<ÚszProcess.create_timecCs trt |j¡St| ¡ƒSdSrä)ÚHAS_PROC_NUM_THREADSrprr²rˆÚthreadsrçrwrwrxÚ num_threadsÞs zProcess.num_threadscCs$| ¡}t |td|td¡S)Nr=r>)rêrZpctxswrÐrörwrwrxÚnum_ctx_switchesæs   þzProcess.num_ctx_switchescCsHt |j¡}g}|D]"\}}}t |||¡}| |¡qtrD| ¡|Srä)rpZ proc_threadsr²rZpthreadr}rrè)rØrµr‘Z thread_idÚutimeZstimer“rwrwrxrýís  zProcess.threadsÚinetc Cs |tvr(td|d dd„tDƒ¡fƒ‚tr¢t|\}}g}t |j¡}|D]D}|\}}} } } } } ||vrL| |vrLt||| | | | tƒ}|  |¡qL|  ¡t |ƒSt|\}}t  |j||¡}g}|D]2}|\}}} } } } t||| | | | tƒ}|  |¡qÆt �r|  ¡|S)NržrŸcSsg|] }t|ƒ‘qSrwr r¢rwrwrxr¥ýr¦z'Process.connections..)r r«r¬rrpr®r²r r¯r}rèrªZproc_connectionsr)rØr±r³r´r~rµrr¶r·r¸r¹rºr4r²r»rwrwrxr©ùs:ÿ  ÿ  ÿ zProcess.connectionsNcCst |j||j¡Srä)rZwait_pidr²rÖ)rØÚtimeoutrwrwrxÚwaitsz Process.waitcCs t |j¡Srä)r—Ú getpriorityr²rçrwrwrxÚnice_getszProcess.nice_getcCst |j|¡Srä)r—Ú setpriorityr²)rØÚvaluerwrwrxÚnice_set#szProcess.nice_setcCs| ¡td}t |d¡S)Nr4ú?)rêrÐÚ PROC_STATUSESÚget)rØÚcoderwrwrxr4'szProcess.statuscCs(| ¡}t |td|tddd¡S)Nr?r@r…)rêrZpiorÐrörwrwrxÚ io_counters-s  üzProcess.io_counterscCs>tr|jdkrdStstr*t |j¡p(dSttr4dndƒ‚dS)z)Return process current working directory.rNr€rí)rr²rÚHAS_PROC_OPEN_FILESrpZproc_cwdrƒr rçrwrwrxÚcwd6sÿþz Process.cwdZmmaprfrhcCst‚dSrä)rƒrçrwrwrxÚ_not_implementedKszProcess._not_implementedcCst |j¡}dd„|DƒS)z8Return files opened by process as a list of namedtuples.cSsg|]\}}t ||¡‘qSrw)rZ popenfile)r£Úpathr¶rwrwrxr¥Ur¦z&Process.open_files..)rprr²)rØrµrwrwrxÚ open_filesQs zProcess.open_filescCst |j¡}tr| ¡|S)z=Return the number of file descriptors opened by this process.)rprr²rrèrérwrwrxÚnum_fds\s zProcess.num_fdscCs t |j¡Srä)rpZproc_cpu_affinity_getr²rçrwrwrxÚcpu_affinity_getjszProcess.cpu_affinity_getc Cs¦ttttƒƒƒƒ}|D]}||vrtd||fƒ‚qzt |j|¡WnZty }zB|j t j t j fvrŠ|D]}||vrltd||fƒ‚ql‚WYd}~n d}~00dS)Nz#invalid CPU #%i (choose between %s)) Útupler¾rˆrr«rpZproc_cpu_affinity_setr²r˜r™ròZEDEADLK)rØZcpusZallcpusrÀrœrwrwrxÚcpu_affinity_setns$ÿÿÿzProcess.cpu_affinity_setcCs t |j¡Srä)rpZproc_memory_mapsr²rçrwrwrxÚ memory_maps‡szProcess.memory_mapscCsP|durt |j|¡St|ƒdkr2tdt|ƒƒ‚|\}}t |j|||¡SdS)Nrz4second argument must be a (soft, hard) tuple, got %s)rpZproc_getrlimitr²rˆr«r¡Zproc_setrlimit)rØÚresourceZlimitsZsoftZhardrwrwrxÚrlimit‹s ÿÿzProcess.rlimit)r)N)N)0Ú__name__Ú __module__Ú __qualname__Ú__doc__Ú __slots__rårèràrrêrërìrKrñrðrórõr3r÷rør{r rúrûZmemory_full_infor<rþrÿrýr©rrrr4r rrZnt_mmap_groupedZ nt_mmap_extrrrÚHAS_PROC_NUM_FDSrrrrrrwrwrwrxr¨Isž                 !      ÿÿ     r¨)F)~rÚ contextlibr™rÞrîZxml.etree.ElementTreeZetreeZ ElementTreer‡Ú collectionsrrrírrrrprr—r r r r r rrrrrrZ_compatrrrrZ__extra__all__ZSIDLZ STATUS_IDLEZSRUNZSTATUS_RUNNINGZSSLEEPZSTATUS_SLEEPINGZSSTOPZSTATUS_STOPPEDrÑZ STATUS_ZOMBIEZSWAITZSTATUS_WAITINGZSLOCKZ STATUS_LOCKEDr ZSDEADZ STATUS_WAKINGZSONPROCZTCPS_ESTABLISHEDZCONN_ESTABLISHEDZ TCPS_SYN_SENTZ CONN_SYN_SENTZTCPS_SYN_RECEIVEDZ CONN_SYN_RECVZTCPS_FIN_WAIT_1ZCONN_FIN_WAIT1ZTCPS_FIN_WAIT_2ZCONN_FIN_WAIT2ZTCPS_TIME_WAITZCONN_TIME_WAITZ TCPS_CLOSEDZ CONN_CLOSEZTCPS_CLOSE_WAITZCONN_CLOSE_WAITZ TCPS_LAST_ACKZ CONN_LAST_ACKZ TCPS_LISTENZ CONN_LISTENZ TCPS_CLOSINGZ CONN_CLOSINGZPSUTIL_CONN_NONEZ CONN_NONEr¯Z getpagesizeZPAGESIZEZAF_LINKršZHAS_PER_CPU_TIMESrürrÚdictrÐrLrWr^Zpfullmemrbrergriryrzr{rr‚r�r„rŽr�Ú disk_usageZdisk_io_countersr•Z net_if_addrsr�r®r½rÂrÆrÇrÉrËr§rÍrÔràÚcontextmanagerrâÚobjectr¨rwrwrwrxÚs6                     ù íú ô    ç#ÿÿÿÿÿ      # (