grthtrhthjhtyjytjytkergtrhtrjytjerhrfh4:24 29/09/2026a MÝ_—cã@s8dZddlZddlZddlZddlZddlZddlZddlmZddlm Z ddl m Z ddl m Z ddl m Zdd l mZdd l mZdd l mZdd l mZdd l mZddl mZddl mZddl mZddl mZddl mZddl mZddl mZddlmZddlmZddlmZddlm Z ddlm!Z!gd¢Z"e #¡Z$ej%Z%ej&dkZ'dZ(dZ)ej*e j+ej,e j-ej.e j/ej0e j1ej2e j3ej4e j-ej5e j6iZ7ej8e j9ej:e j;eje j?ej@e jAejBe jCejDe jEejFe jGejHe jIejJe jKejLe jMejNe jOejPe(ejQe)iZReSddddd d!d"d#d$d%d&d'd(� ZTed)gd*¢ƒZUed+gd,¢ƒZVed-gd.¢ƒZWed/d0d1gƒZXeXZYed2gd3¢ƒZZed4d5d6 [eZj\¡ƒZ]d7d8„Z^d9d:„Z_d;d<„Z`d=d>„Zad?d@„ZbdAdB„ZcdCdD„ZdejeZee jfZfdYdFdG„ZgejhZhejiZidZdIdJ„ZjdKdL„ZkdMdN„ZldOdP„ZmdQdR„ZndSdT„ZodUdV„ZpGdWdX„dXeqƒZrdS)[z'Sun OS Solaris platform implementation.éN)Ú namedtuple)ÚAF_INETé)Ú_common)Ú_psposix)Ú _psutil_posix)Ú _psutil_sunos)Ú AccessDenied)ÚAF_INET6)Údebug)Úget_procfs_path)Ú isfile_strict)Úmemoize_when_activated)Ú NoSuchProcess)Úsockfam_to_enum)Úsocktype_to_enum)Ú usage_percent)Ú ZombieProcess)Úb)ÚFileNotFoundError)ÚPermissionError)ÚProcessLookupError)ÚPY3)Ú CONN_IDLEÚ CONN_BOUNDZ PROCFS_PATHlZIDLEZBOUNDéééééééé é é ) ÚppidÚrssÚvmsÚ create_timeÚniceÚ num_threadsÚstatusÚttynrÚuidÚeuidÚgidÚegidÚ scputimes)ÚuserÚsystemZidleZiowaitÚ pcputimes)r2r3Ú children_userÚchildren_systemÚsvmem)ÚtotalZ availableÚpercentÚusedÚfreeÚpmemr&r'Ú pmmap_grouped)Úpathr&Z anonymousÚlockedÚ pmmap_extz addr perms ú cCsFt d¡t}t d¡t}}||}t||dd�}t|||||ƒS)zReport virtual memory metrics.Ú SC_PHYS_PAGESÚSC_AVPHYS_PAGESr©Zround_)ÚosÚsysconfÚ PAGE_SIZErr7)r8r;Zavailr:r9©rHú5/usr/lib64/python3.9/site-packages/psutil/_pssunos.pyÚvirtual_memory{s rJc Cs t ¡\}}tjddtjdddgtjd�}| ¡\}}trL|  t j j ¡}|j dkrdtd|j ƒ‚| ¡ d ¡d d …}|s†td ƒ‚d}}|D]D}| ¡}|d d…\} } |tt| ƒdƒ7}|tt| ƒdƒ7}q’||} t| |d d�} t || || |t|t¡S)zReport swap memory metrics.z /usr/bin/envzPATH=/usr/sbin:/sbin:%sÚPATHZswapz-l)Ústdoutrz'swap -l' failed (retcode=%s)Ú rNzno swap device(s) configuredrrirD)ÚcextZswap_memÚ subprocessÚPopenrEÚenvironÚPIPEÚ communicaterÚdecodeÚsysrLÚencodingÚ returncodeÚ RuntimeErrorÚstripÚsplitÚintrrZsswaprG) ZsinZsoutÚprLÚstderrÚlinesr8r;ÚlineÚtÚfr:r9rHrHrIÚ swap_memory†s6 ÿÿþ    ÿrbcCst ¡}tdd„t|ŽDƒŽS)z-Return system-wide CPU times as a named tuplecSsg|] }t|ƒ‘qSrH)Úsum©Ú.0ÚxrHrHrIÚ ¯ózcpu_times..)rNÚ per_cpu_timesr1Úzip©ÚretrHrHrIÚ cpu_times¬srmcCst ¡}dd„|DƒS)z5Return system per-CPU times as a list of named tuplescSsg|] }t|Ž‘qSrH)r1rdrHrHrIrgµrhz!per_cpu_times..)rNrirkrHrHrIri²sricCs&z t d¡WSty YdS0dS)z0Return the number of logical CPUs in the system.ÚSC_NPROCESSORS_ONLNN)rErFÚ ValueErrorrHrHrHrIÚcpu_count_logical¸s  rpcCst ¡S)z1Return the number of physical CPUs in the system.)rNZcpu_count_physrHrHrHrIÚcpu_count_physicalÁsrqcCs$t ¡\}}}}d}t ||||¡S)z*Return various CPU stats as a named tuple.r)rNÚ cpu_statsrZ scpustats)Z ctx_switchesZ interruptsZsyscallsZtrapsZsoft_interruptsrHrHrIrrÆs  ÿrrFc Cs°g}t ¡}|D]š}|\}}}}|dkr,d}|s„zt|ƒjs@WqWn@ty‚}z(td||fƒWYd}~qWYd}~n d}~00d} } t ||||| | ¡} | | ¡q|S)zReturn system disk partitions.ZnoneÚzskipping %r: %rN) rNÚdisk_partitionsÚ disk_usager8ÚOSErrorr rZ sdiskpartÚappend) ÚallÚretlistZ partitionsÚ partitionZdeviceZ mountpointZfstypeZoptsÚerrZmaxfileZmaxpathZntuplerHrHrIrt×s&  " ÿ rtéÿÿÿÿc Cstj ¡}|dkr| dd¡||vrFtd|d dd„|Dƒ¡fƒ‚tj|\}}t |¡}tƒ}|D]¨}|\}} } } } } }| |vrˆqh| |vr’qh| t t fvrº| r¬tj | Ž} | rºtj | Ž} t | } t | ƒ} t| ƒ} |dkròt || | | | | |¡}nt || | | | | ¡}| |¡qht|ƒS)z»Return socket connections. If pid == -1 return system-wide connections (as opposed to connections opened by one process only). Only INET sockets are returned (UNIX are not). r|Úunixrz+invalid %r kind argument; choose between %sz, cSsg|] }t|ƒ‘qSrH)ÚreprrdrHrHrIrgrhz#net_connections..)rZ conn_tmapÚcopyÚpoproÚjoinrNÚnet_connectionsÚsetrr ÚaddrÚ TCP_STATUSESrrZsconnÚpconnÚaddÚlist)ÚkindÚ_pidZcmapZfamiliesÚtypesÚrawlistrlÚitemÚfdZfamÚtype_ZladdrZraddrr+ÚpidÚntrHrHrIr‚üs:  ÿ     r‚cCsRt ¡}| ¡D]<\}}|\}}}}ttdƒr8t |¡}t ||||¡||<q|S)z)Get NIC stats (isup, duplex, speed, mtu).Ú NicDuplex)rNÚ net_if_statsÚitemsÚhasattrrr’Z snicstats)rlÚnamer”ZisupZduplexZspeedZmturHrHrIr“!s   r“cCst ¡S)z:The system boot time expressed in seconds since the epoch.)rNÚ boot_timerHrHrHrIr—1sr—c Cs\g}t ¡}d}|D]B}|\}}}}}} |s.q||vr:d}t ||||| ¡} | | ¡q|S)z:Return currently connected users as a list of namedtuples.)z:0.0z:0Ú localhost)rNÚusersrZsuserrw) ryrŒr˜r�r2ÚttyÚhostnameZtstampZ user_processr�r‘rHrHrIr™6s r™cCsdd„t ttƒƒ¡DƒS)z7Returns a list of PIDs currently running on the system.cSsg|]}| ¡rt|ƒ‘qSrH)Úisdigitr[rdrHrHrIrgPrhzpids..)rEÚlistdirrr rHrHrHrIÚpidsNsržcCs t |¡S)z&Check for the existence of a unix pid.)rÚ pid_exists)r�rHrHrIrŸSsrŸcst ˆ¡‡fdd„ƒ}|S)zƒCall callable into a try/except clause and translate ENOENT, EACCES and EPERM in NoSuchProcess or AccessDenied exceptions. c s¶zˆ|g|¢Ri|¤ŽWSttfyZt|jƒsDt|j|jƒ‚nt|j|j|jƒ‚YnXtyxt |j|jƒ‚Yn:t y°|jdkrªdt ƒvr¨t |j|jƒ‚n‚‚Yn0dS©Nr) rrrŸr�rÚ_namerÚ_ppidrr rvrž)ÚselfÚargsÚkwargs©ÚfunrHrIÚwrapper\s     z wrap_exceptions..wrapper)Ú functoolsÚwraps)r§r¨rHr¦rIÚwrap_exceptionsXsr«c@s¬eZdZdZgd¢Zdd„Zdd„Zdd„Zd d „Ze e d d „ƒƒZ e e d d„ƒƒZ e e dd„ƒƒZ e dd„ƒZe dd„ƒZe dd„ƒZe dd„ƒZe dd„ƒZe dd„ƒZe dd„ƒZe dd „ƒZe d!d"„ƒZe d#d$„ƒZe d%d&„ƒZe d'd(„ƒZe d)d*„ƒZe d+d,„ƒZe d-d.„ƒZe d/d0„ƒZeZe d1d2„ƒZe d3d4„ƒZ e d5d6„ƒZ!d7d8„Z"e dHd:d;„ƒZ#e$dƒZ&e d?d@„ƒZ'e dAdB„ƒZ(e dCdD„ƒZ)e dIdFdG„ƒZ*dES)JÚProcessz1Wrapper class around underlying C implementation.)r�r¡r¢Ú _procfs_pathÚ_cachecCs||_d|_d|_tƒ|_dS©N)r�r¡r¢r r­)r£r�rHrHrIÚ__init__yszProcess.__init__cCst d|j|jf¡dS)z+Raise NSP if the process disappeared on us.ú%s/%sN)rEÚstatr­r�©r£rHrHrIÚ _assert_aliveszProcess._assert_alivecCs(|j |¡|j |¡|j |¡dSr¯)Ú_proc_name_and_argsZcache_activateÚ_proc_basic_infoÚ _proc_credr³rHrHrIÚ oneshot_enter…s  zProcess.oneshot_entercCs(|j |¡|j |¡|j |¡dSr¯)rµZcache_deactivater¶r·r³rHrHrIÚ oneshot_exitŠs  zProcess.oneshot_exitcCst |j|j¡Sr¯)rNZproc_name_and_argsr�r­r³rHrHrIrµ�szProcess._proc_name_and_argscCsT|jdkr,tj d|j|jf¡s,t|jƒ‚t |j|j¡}t|ƒtt ƒksPJ‚|S)Nrz %s/%s/psinfo) r�rEr>Úexistsr­r rNZproc_basic_infoÚlenÚ proc_info_map)r£rlrHrHrIr¶”s ÿ zProcess._proc_basic_infocCst |j|j¡Sr¯)rNZ proc_credr�r­r³rHrHrIr·žszProcess._proc_credcCs | ¡dSr )rµr³rHrHrIr–£sz Process.namecCs8zt d|j|jf¡WSty*Yn0| ¡dS)Nz%s/%s/path/a.outrs)rEÚreadlinkr­r�rvÚcmdliner³rHrHrIÚexe¨sÿ z Process.execCs| ¡d d¡S)NrrA)rµrZr³rHrHrIr¾µszProcess.cmdlinecCst |j|j¡Sr¯)rNZ proc_environr�r­r³rHrHrIrQ¹szProcess.environcCs| ¡tdS)Nr(©r¶r¼r³rHrHrIr(½szProcess.create_timecCs| ¡tdS)Nr*rÀr³rHrHrIr*ÁszProcess.num_threadscCs| ¡tdS)Nr)rÀr³rHrHrIÚnice_getÅszProcess.nice_getcCs&|jdvrt|j|jƒ‚t |j|¡S)N)rr)r�r r¡Ú cext_posixÚ setpriority)r£ÚvaluerHrHrIÚnice_setÌs zProcess.nice_setcCs| ¡td|_|jS)Nr%)r¶r¼r¢r³rHrHrIr%Ösz Process.ppidcCs^z| ¡\}}}}}}Wn6tyN| ¡td}| ¡td}d}Yn0t |||¡S)Nr-r.©r·r r¶r¼rZpuids)r£ÚrealÚ effectiveÚsavedÚ_rHrHrIÚuidsÛs  z Process.uidscCs^z| ¡\}}}}}}Wn6tyN| ¡td}| ¡td}d}Yn0t |||¡S)Nr/r0rÆ)r£rÊrÇrÈrÉrHrHrIÚgidsås  z Process.gidsc Cs\zt |j|j¡}Wn<tyP}z$|jtjkr:ts:d}n‚WYd}~n d}~00tj |ŽS)N)çrÍrÍrÍ) rNZproc_cpu_timesr�r­rvÚerrnoÚ EOVERFLOWÚ IS_64_BITrr4)r£Útimesr{rHrHrIrmïszProcess.cpu_timescCst |j|j¡Sr¯)rNZ proc_cpu_numr�r­r³rHrHrIÚcpu_numszProcess.cpu_numc Csz|j}d}t| ¡tdƒ}|tjkrjdD]<}zt d||j|f¡WSt yfd}Yq,Yq,0q,|rv|  ¡dS)NFr,)rrréÿz %s/%d/path/%dT) r­r«r¶r¼rNZPRNODEVrEr½r�rr´)r£Ú procfs_pathÚ hit_enoentršrfrHrHrIÚterminals ÿ ÿ   zProcess.terminalcCsJ|j}zt d||jf¡WStyDt d||jf¡YdS0dS)Nz%s/%s/path/cwdr±)r­rEr½r�rr²)r£rÔrHrHrIÚcwds  z Process.cwdcCs2| ¡}|tdd}|tdd}t||ƒS)Nr&ir')r¶r¼r<)r£rlr&r'rHrHrIÚ memory_info#szProcess.memory_infocCs| ¡td}t |d¡S)Nr+ú?)r¶r¼Ú PROC_STATUSESÚget)r£ÚcoderHrHrIr+,szProcess.statusc CsÔ|j}g}t d||jf¡}d}|D]œ}t|ƒ}zt |j||¡\}}Wn^ty¨}zF|jtj krvt svWYd}~q&|jtj kr’d}WYd}~q&‚WYd}~q&d}~00t   |||¡} | | ¡q&|rÐ| ¡|S)Nz %s/%d/lwpFT)r­rEr�r�r[rNZquery_process_threadÚEnvironmentErrorrÎrÏrÐÚENOENTrZpthreadrwr´) r£rÔrlZtidsrÕÚtidÚutimeZstimer{r‘rHrHrIÚthreads2s,ÿ     zProcess.threadsc Cs¨g}d}|j}d||jf}t d||jf¡D]f}tj ||¡}tj |¡r0zt |¡}Wntyvd}Yq0Yq00t |ƒr0|  t   |t |ƒ¡¡q0|r¤| ¡|S)NFz %s/%d/pathz%s/%d/fdT)r­r�rEr�r>r�Úislinkr½rr rwrZ popenfiler[r´)r£ryrÕrÔZpathdirrŽr>ÚfilerHrHrIÚ open_filesSs"   zProcess.open_filesc cs(d|}tj|dtjtjd�}| ¡\}}trDdd„||fDƒ\}}|jdkr’d| ¡vrht|j|j ƒ‚d| ¡vr‚t |j|j ƒ‚t d ||fƒ‚|  d ¡d d …}t |ƒD]v\}}| ¡}| d ¡r¬|  dd ¡d } ||d  ¡} | dkrötj} n| dk�rtj} nd} dtj| | dtjfVq¬d S)z.rzpermission deniedzno such processz%r command error %srMrNzsockname: AF_UNIXrAÚ SOCK_STREAMÚ SOCK_DGRAMr|rs)rOrPrRrSrrWÚlowerr r�r¡rrXrZÚ enumerateÚlstripÚ startswithrYÚsocketrærçZAF_UNIXrÚ CONN_NONE) r£r�Úcmdr\rLr]r^Úir_r>ÚtyperHrHrIÚ_get_unix_socketshs6 ÿ ÿ      zProcess._get_unix_socketsÚinetcCsPt||jd�}|s(t d|j|jf¡|dvrL| dd„| |j¡Dƒ¡|S)N)rŠr±)rxr}cSsg|]}tj|Ž‘qSrH)rr†)reZconnrHrHrIrg–rhz'Process.connections..)r‚r�rEr²r­Úextendrñ)r£r‰rlrHrHrIÚ connectionsˆs  ÿzProcess.connectionsZmmapzpath rss anon lockedzaddr perms path rss anon lockedc Cs0dd„}|j}g}zt |j|¡}WnFtyj}z.|jtjkrTtsTgWYd}~S‚WYd}~n d}~00d}|D]¨}|\}} } } } } }||| ƒ}|  d¡�szt   d||j| f¡} WnJt�y}z0|jtj krîd||j| f} d}n‚WYd}~n d}~00|  || | | | |f¡qt|�r,|  ¡|S)NcSs0dt|ƒdd… d¡t|ƒdd… d¡fS)Nz%s-%srÚL)ÚhexrY)ÚstartÚendrHrHrIÚtoaddrŸsÿz#Process.memory_maps..toaddrFú[z %s/%s/path/%sT)r­rNZproc_memory_mapsr�rvrÎrÏrÐrërEr½rÞrwr´)r£rùrÔryrŒr{rÕr�r„ZaddrsizeZpermr–r&Zanonr?rHrHrIÚ memory_maps�s6  ÿ zProcess.memory_mapscCstt d|j|jf¡ƒS)Nz%s/%s/fd)r»rEr�r­r�r³rHrHrIÚnum_fdsÌszProcess.num_fdscCstjt |j|j¡ŽSr¯)rZpctxswrNZproc_num_ctx_switchesr�r­r³rHrHrIÚnum_ctx_switchesÐsÿzProcess.num_ctx_switchesNcCst |j||j¡Sr¯)rZwait_pidr�r¡)r£ÚtimeoutrHrHrIÚwaitÕsz Process.wait)rò)N)+Ú__name__Ú __module__Ú __qualname__Ú__doc__Ú __slots__r°r´r¸r¹r«rrµr¶r·r–r¿r¾rQr(r*rÁrÅr%rËrÌrmrÒrÖr×rØZmemory_full_infor+rárärñrôrZnt_mmap_groupedZ nt_mmap_extrûrürýrÿrHrHrHrIr¬ts†                           .  r¬)F)r|)srrÎr©rErìrOrUÚ collectionsrrrsrrrrÂrrNr r r r r rrrrrrZ_compatrrrrrZ__extra__all__Z getpagesizerGZAF_LINKÚmaxsizerÐrrZSSLEEPZSTATUS_SLEEPINGZSRUNZSTATUS_RUNNINGZSZOMBZ STATUS_ZOMBIEZSSTOPZSTATUS_STOPPEDZSIDLZ STATUS_IDLEZSONPROCZSWAITZSTATUS_WAITINGrÚZTCPS_ESTABLISHEDZCONN_ESTABLISHEDZ TCPS_SYN_SENTZ CONN_SYN_SENTZ TCPS_SYN_RCVDZ 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_NONEríZ TCPS_IDLEZ TCPS_BOUNDr…Údictr¼r1r4r7r<Zpfullmemr=r�Ú_fieldsr@rJrbrmrirprqrrZdisk_io_countersrurtZnet_io_countersZ net_if_addrsr‚r“r—r™ržrŸr«Úobjectr¬rHrHrHrIÚsÐ                       ù òôÿÿÿ  &   ! %