grthtrhthjhtyjytjytkergtrhtrjytjerhrfh4:24 29/09/2026a MÝ_VDã@sÂdZddlZddlZddlZddlZddlmZddlmZddlm Z ddlm Z ddlm Z dd lmZdd lmZdd lmZdd lmZdd lmZddlmZddlmZddlmZddlmZddlmZddlmZgZe  ¡Ze jZe jeje j ej!e j"ej#e j$ej%e j&ej'e j(ej)e j*ej+e j,ej-e j.ej/e j0ej1e j2ej3e j4ej5i Z6e j7ej8e j9ej:e j;eje j?ej@iZAeBdddddddddddd� ZCeBddddddddd�ZDedgd ¢ƒZEed!gd"¢ƒZFed#gd$¢ƒZGed%eGjHd&ƒZId'd(„ZJd)d*„ZKd+d,„ZLd-d.„ZMd/d0„ZNd1d2„ZOd3d4„ZPd5d6„ZQe jRZRe jSZSdOd8d9„ZTd:d;„ZUe jVZVe jWZWdPd=d>„ZXd?d@„ZYdAdB„ZZdCdD„Z[dEdF„Z\e j]Z]dGdH„Z^dIdJ„Z_ej`dKdL„ƒZaGdMdN„dNebƒZcdS)QzmacOS platform implementation.éN)Ú namedtupleé)Ú_common)Ú_psposix)Ú _psutil_osx)Ú _psutil_posix)Ú AccessDenied)Ú conn_tmap)Úconn_to_ntuple)Ú isfile_strict)Úmemoize_when_activated)Ú NoSuchProcess)Úparse_environ_block)Ú usage_percent)Ú ZombieProcess)ÚPermissionError)ÚProcessLookupErroréééééééé é ) ÚppidÚruidÚeuidÚsuidÚrgidÚegidÚsgidÚttynrÚctimeÚstatusÚname)ÚcpuutimeÚcpustimeÚrssÚvmsÚpfaultsÚpageinsÚ numthreadsÚvolctxswÚ scputimes©ÚuserÚniceÚsystemÚidleÚsvmem)ÚtotalZ availableÚpercentÚusedÚfreeÚactiveÚinactiveÚwiredÚpmem)r)r*r+r,Úpfullmem)Úussc CsTt ¡\}}}}}}||}||}||8}t|||dd�}t||||||||ƒS)z&System virtual memory as a namedtuple.r©Zround_)ÚcextZ virtual_memrr5) r6r:r;r<r9Z speculativeZavailr8r7©rBú3/usr/lib64/python3.9/site-packages/psutil/_psosx.pyÚvirtual_memoryps ÿrDcCs4t ¡\}}}}}t||dd�}t ||||||¡S)z=Swap system memory as a (total, used, free, sin, sout) tuple.rr@)rAZswap_memrrZsswap)r6r8r9ZsinZsoutr7rBrBrCÚ swap_memory�srEcCst ¡\}}}}t||||ƒS)z(Return system CPU times as a namedtuple.)rAÚ cpu_timesr/r0rBrBrCrF�srFcCs:g}t ¡D](}|\}}}}t||||ƒ}| |¡q |S)z(Return system CPU times as a named tuple)rAÚ per_cpu_timesr/Úappend)ÚretZcpu_tr1r2r3r4ÚitemrBrBrCrG“s    rGcCst ¡S)z0Return the number of logical CPUs in the system.)rAÚcpu_count_logicalrBrBrBrCrK�srKcCst ¡S)z1Return the number of physical CPUs in the system.)rAZcpu_count_physrBrBrBrCÚcpu_count_physical¢srLcCs"t ¡\}}}}}t ||||¡S©N)rAÚ cpu_statsrZ scpustats)Z ctx_switchesZ interruptsZsoft_interruptsZsyscallsZtrapsrBrBrCrN§s ÿ ÿrNcCst ¡\}}}t |||¡gS)z¾Return CPU frequency. On macOS per-cpu frequency is not supported. Also, the returned frequency never changes, see: https://arstechnica.com/civis/viewtopic.php?f=19&t=465002 )rAÚcpu_freqrZscpufreq)ZcurrZmin_Zmax_rBrBrCrO®srOFc Csvg}t ¡}|D]`}|\}}}}|dkr,d}|sJtj |¡rtj |¡sJqd}} t |||||| ¡} | | ¡q|S)z8Return mounted disk partitions as a list of namedtuples.ZnoneÚN) rAÚdisk_partitionsÚosÚpathÚisabsÚexistsrZ sdiskpartrH) ÚallÚretlistZ partitionsÚ partitionZdeviceZ mountpointZfstypeZoptsZmaxfileZmaxpathÚntuplerBrBrCrQÁs  ÿ rQcCsbzt ¡\}}}Wnty&YdS0|dk}|rd|pDd||¡}| |¡q|S)z:Return currently connected users as a list of namedtuples.ú~N)rAÚusersrZsuserrH) rWÚrawlistrJr1ZttyÚhostnameZtstamprdÚntrBrBrCrs"s rscCs`t ¡}d|vr\ztdƒ ¡| dd¡Wn.ty>YntyZ| dd¡Yn0|S©Nr)rAr_r`Ú create_timeÚinsertr r)ZlsrBrBrCr_6s   r_cCs8zt |¡td}|tjkWSty2YdS0dS)Nr%F)rAÚproc_kinfo_oneshotÚkinfo_proc_mapÚSZOMBÚ Exception)rdÚstrBrBrCÚ is_zombieIs   rcst ˆ¡‡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ƒ‚YnDtytt|j|jƒ‚Yn&t j y˜t|j|j|jƒ‚Yn0dSrM) rrrdrÚ_nameÚ_ppidr rrrAZZombieProcessError)ÚselfÚargsÚkwargs©ÚfunrBrCÚwrapperUs   z wrap_exceptions..wrapper)Ú functoolsÚwraps)r†r‡rBr…rCÚwrap_exceptionsQs rŠc cs¢z dVWn’ttfyœ}zvt|tƒs4|jtjkr†z | ¡}WntyV|‚Yqˆ0|tjkrvt |j |j |j ƒ‚qˆt |j |j ƒ‚n‚WYd}~n d}~00dS)zýThere are some poor C APIs which incorrectly raise ESRCH when the process is still alive or it's a zombie, or even RuntimeError (those who don't set errno). This is here in order to solve: https://github.com/giampaolo/psutil/issues/1044 N)rkÚ RuntimeErrorÚ isinstancerlZESRCHr%r rÚ STATUS_ZOMBIErrdr€r�r)Úprocror%rBrBrCÚ catch_zombiees     r�c@sheZdZdZgd¢Zdd„Zeedd„ƒƒZeedd„ƒƒZ d d „Z d d „Z ed d„ƒZ edd„ƒZ edd„ƒZedd„ƒZedd„ƒZedd„ƒZedd„ƒZedd„ƒZedd„ƒZedd „ƒZed!d"„ƒZed#d$„ƒZed%d&„ƒZed'd(„ƒZed)d*„ƒZed+d,„ƒZed=d.d/„ƒZed0d1„ƒZed>d3d4„ƒZed5d6„ƒZed7d8„ƒZ ed9d:„ƒZ!ed;d<„ƒZ"d2S)?r`z1Wrapper class around underlying C implementation.)rdr€r�Ú_cachecCs||_d|_d|_dSrM)rdr€r�)r‚rdrBrBrCÚ__init__„szProcess.__init__cCst |j¡}|SrM)rArzrd©r‚rIrBrBrCÚ_get_kinfo_proc‰s zProcess._get_kinfo_proccCs8t|ƒ�t |j¡}Wdƒn1s*0Y|SrM)r�rAZproc_pidtaskinfo_oneshotrdr’rBrBrCÚ_get_pidtaskinfo‘s *zProcess._get_pidtaskinfocCs|j |¡|j |¡dSrM)r“Zcache_activater”©r‚rBrBrCÚ oneshot_enteršs zProcess.oneshot_entercCs|j |¡|j |¡dSrM)r“Zcache_deactivater”r•rBrBrCÚ oneshot_exitžs zProcess.oneshot_exitcCs(| ¡td}|dur|St |j¡S)Nr&)r“r{rAZ proc_namerd)r‚r&rBrBrCr&¢sz Process.namecCs8t|ƒ�t |j¡WdƒS1s*0YdSrM)r�rAZproc_exerdr•rBrBrCÚexe§s z Process.execCs8t|ƒ�t |j¡WdƒS1s*0YdSrM)r�rAZ proc_cmdlinerdr•rBrBrCÚcmdline¬s zProcess.cmdlinecCs<t|ƒ� tt |j¡ƒWdƒS1s.0YdSrM)r�rrAZ proc_environrdr•rBrBrCÚenviron±s zProcess.environcCs| ¡td|_|jS)Nr)r“r{r�r•rBrBrCr¶sz Process.ppidcCs8t|ƒ�t |j¡WdƒS1s*0YdSrM)r�rAZproc_cwdrdr•rBrBrCÚcwd»s z Process.cwdcCs.| ¡}t |td|td|td¡S)Nrrr©r“rZpuidsr{©r‚ZrawtuplerBrBrCÚuidsÀs    ýz Process.uidscCs.| ¡}t |td|td|td¡S)Nr r!r"rœr�rBrBrCÚgidsÈs    ýz Process.gidscCs<| ¡td}t ¡}z ||WSty6YdS0dS)Nr#)r“r{rZget_terminal_mapÚKeyError)r‚Ztty_nrZtmaprBrBrCÚterminalÐs   zProcess.terminalcCs6| ¡}t|td|td|td|tdƒS)Nr)r*r+r,)r”r=Úpidtaskinfo_mapr�rBrBrCÚ memory_infoÙs    üzProcess.memory_infocCs"| ¡}t |j¡}t||fŽSrM)r£rAZproc_memory_ussrdr>)r‚Z basic_memr?rBrBrCÚmemory_full_infoãs zProcess.memory_full_infocCs(| ¡}t |td|tddd¡S)Nr'r(g)r”rZ pcputimesr¢r�rBrBrCrFés   üzProcess.cpu_timescCs| ¡tdS)Nr$)r“r{r•rBrBrCrxòszProcess.create_timecCs| ¡td}t |d¡S)Nr.r)r”r¢rZpctxsw)r‚ZvolrBrBrCÚnum_ctx_switchesöszProcess.num_ctx_switchescCs| ¡tdS)Nr-)r”r¢r•rBrBrCÚ num_threadsþszProcess.num_threadscCsv|jdkrgSg}t|ƒ�t |j¡}Wdƒn1s<0Y|D]&\}}t|ƒrJt ||¡}| |¡qJ|Srw)rdr�rAZproc_open_filesr rZ popenfilerH)r‚ÚfilesrtrSÚfdrYrBrBrCÚ open_filess  *   zProcess.open_filesr^c Cs¬|tvr(td|d dd„tDƒ¡fƒ‚t|\}}t|ƒ� t |j||¡}Wdƒn1sb0Yg}|D]2}|\}}} } } } t||| | | | tƒ} |  | ¡qt|S)Nz+invalid %r kind argument; choose between %sz, cSsg|] }t|ƒ‘qSrB)Úrepr)Ú.0ÚxrBrBrCÚ óz'Process.connections..) r Ú ValueErrorÚjoinr�rAZproc_connectionsrdr Ú TCP_STATUSESrH)r‚rcZfamiliesÚtypesrtrIrJr¨ZfamÚtypeZladdrZraddrr%rvrBrBrCrasÿ  .ÿ zProcess.connectionscCsF|jdkrdSt|ƒ�t |j¡WdƒS1s80YdSrw)rdr�rAZ proc_num_fdsr•rBrBrCÚnum_fdss  zProcess.num_fdsNcCst |j||j¡SrM)rZwait_pidrdr€)r‚ÚtimeoutrBrBrCÚwait&sz Process.waitcCs8t|ƒ�t |j¡WdƒS1s*0YdSrM)r�rjÚ getpriorityrdr•rBrBrCÚnice_get*s zProcess.nice_getcCs:t|ƒ�t |j|¡WdƒS1s,0YdSrM)r�rjÚ setpriorityrd)r‚ÚvaluerBrBrCÚnice_set/s zProcess.nice_setcCs| ¡td}t |d¡S)Nr%ú?)r“r{Ú PROC_STATUSESÚget)r‚ÚcoderBrBrCr%4szProcess.statuscCs<t |j¡}g}|D]"\}}}t |||¡}| |¡q|SrM)rAZ proc_threadsrdrZpthreadrH)r‚rtrWZ thread_idÚutimeZstimerYrBrBrCÚthreads:s   zProcess.threads)r^)N)#Ú__name__Ú __module__Ú __qualname__Ú__doc__Ú __slots__r‘rŠr r“r”r–r—r&r˜r™ršrr›ržrŸr¡r£r¤rFrxr¥r¦r©rar´r¶r¸r»r%rÁrBrBrBrCr`sr                        r`)F)r^)drÅÚ contextlibrlrˆrRÚ collectionsrrPrrrrArrjrr r r r r rrrZ_compatrrZ__extra__all__Z getpagesizeZPAGESIZEZAF_LINKZTCPS_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±ZSIDLZ STATUS_IDLEZSRUNZSTATUS_RUNNINGZSSLEEPZSTATUS_SLEEPINGZSSTOPZSTATUS_STOPPEDr|r�r½Údictr{r¢r/r5r=Ú_fieldsr>rDrErFrGrKrLrNrOÚ disk_usageZdisk_io_countersrQr\rhZ net_if_addrsrfrprqrsr_Z pid_existsrrŠÚcontextmanagerr�Úobjectr`rBrBrBrCÚsÀ                ôûõøÿ