o
    ˆ¶¹a8y  ã                   @   sÆ  d Z ddlZddlZddlZddlZddlm  mZ ddl	m
Z
 ddl	mZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlm Z  ddlm!Z! ddlm"Z" g Z#er¼ej$ej%ej&ej'ej(ej)ej*ej+ej,ej-ej.ej/ej0ej1iZ2n=erÝej$ej%ej(ej)ej*ej+ej3ej-ej,ej-ej&ej4ej5ej'iZ2nerùej$ej%ej(ej)ej*ej+ej,ej-ej&ej4ej5ej'iZ2ej6ej7ej8ej9ej:ej;ej<ej=ej>ej?ej@ejAejBejCejDejEejFejGejHejIejJejKejLejMiZNe O¡ ZPejQZQeRedƒZSeRedƒZTeRedƒZUeRedƒZVeWdŠi dd“dd“dd “d!d"“d#d$“d%d&“d'd(“d)d*“d+d,“d-d.“d/d0“d1d2“d3d4“d5d6“d7d8“d9d:“d;d<“d=d>“d?d@“dAdB“dCdD“dEdF“dGdH“dIdJ“dKdL“ŽZXedMg dN¢ƒZYedOg dP¢ƒZZedQg dR¢ƒZ[e[Z\edSg dT¢ƒZ]edUdVƒZ^edWdXƒZ_e�rÉedYg dZ¢ƒZ`nedYg d[¢ƒZ`d\d]„ Zad^d_„ Zbd`da„ ZceS�rädbd„ Zdndcd„ Zddded_ededf„ Zfe�sõe�rúdgdh„ Zgndidh„ Zgdjdk„ Zhd‹dldm„ZiejjZjejkZkejlZlejmZmdndo„ Zndpdq„ Zoe�r*drds„ Zpdtdu„ Zqdvdw„ Zrdxdy„ Zsdzd{„ Zted|d}„ ƒZud~d„ Zve�sBe�rGd€d�„ ZwnejwZwd‚dƒ„ Zxd„d…„ Zyejzd†d‡„ ƒZ{G dˆd‰„ d‰e|ƒZ}dS )Œz5FreeBSD, OpenBSD and NetBSD platforms implementation.é    N)Údefaultdict)Ú
namedtupleé   )Ú_common)Ú_psposix)Ú_psutil_bsd)Ú_psutil_posix)ÚFREEBSD)ÚNETBSD)ÚOPENBSD)ÚAccessDenied)ÚNoSuchProcess)ÚZombieProcess)Ú	conn_tmap)Úconn_to_ntuple)Úmemoize)Úmemoize_when_activated)Úusage_percent)Ú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)ÚtotalÚ	availableÚpercentÚusedÚfreeÚactiveÚinactiveÚbuffersÚcachedÚsharedÚwiredÚ	scputimes©ÚuserÚniceÚsystemÚidleÚirqÚpmem)r>   r@   ÚtextÚdataÚstackÚ	pcputimes)rZ   r\   Ú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_bytesÚ	read_timeÚ
write_timeÚ	busy_time)rk   rl   rm   rn   c                  C   sØ   t  ¡ } | \}}}}}}}}trItddƒ�,}	|	D ]!}
|
 d¡r*t|
 ¡ d ƒd }q|
 d¡r9t|
 ¡ d ƒd }qW d  ƒ n1 sDw   Y  || | }|| | }t|| |dd�}t|||||||||||ƒS )	z&System virtual memory as a namedtuple.z/proc/meminfoÚrbs   Buffers:r   i   s
   MemShared:N©Úround_)	ÚcextÚvirtual_memr
   ÚopenÚ
startswithÚintÚsplitr   rL   )ÚmemrM   rQ   rR   rS   rW   rU   rT   rV   ÚfÚlineÚavailrP   rO   © r   ú//usr/lib/python3/dist-packages/psutil/_psbsd.pyÚvirtual_memory³   s$   

€üÿÿr�   c                  C   s4   t  ¡ \} }}}}t|| dd�}t | |||||¡S )z@System swap memory as (total, used, free, sin, sout) namedtuple.r   rs   )ru   Úswap_memr   r   Ússwap)rM   rP   rQ   ÚsinÚsoutrO   r   r   r€   Úswap_memoryÇ   s   r†   c                  C   s"   t  ¡ \} }}}}t| ||||ƒS )z+Return system per-CPU times as a namedtuple)ru   Ú	cpu_timesrX   rY   r   r   r€   r‡   Ó   s   r‡   c                  C   s>   g } t  ¡ D ]}|\}}}}}t|||||ƒ}|  |¡ q| S )ú'Return system CPU times as a namedtuple)ru   r   rX   Úappend)ÚretÚcpu_trZ   r[   r\   r]   r^   Úitemr   r   r€   r   Ú   s   c                   C   s.   t ƒ dkr	tƒ gS tjrtdƒ‚dt_tƒ gS )rˆ   r   ú&supported only starting from FreeBSD 8T)Úcpu_count_logicalr‡   r   Ú
__called__ÚNotImplementedErrorr   r   r   r€   r   ê   s   
Fc                   C   ó   t  ¡ S )z0Return the number of logical CPUs in the system.)ru   rŽ   r   r   r   r€   rŽ   ö   ó   rŽ   c                   C   s   t ƒ dkrdS d S )Nr   )rŽ   r   r   r   r€   Úcpu_count_coresü   ó   r“   c                  C   s€   d} t  ¡ }|dur5| d¡}|dkr5|d|d … }t |¡}zt| d¡ƒp)d} W | ¡  n| ¡  w | s>tƒ dkr>dS | S )z-Return the number of CPU cores in the system.Nz	</groups>éÿÿÿÿr-   zgroup/children/group/cpur   )	ru   Úcpu_topologyÚrfindÚETÚ
fromstringÚlenÚfindallÚclearrŽ   )rŠ   ÚsÚindexÚrootr   r   r€   r“      s   


c            	      C   s¬   t rt ¡ \} }}}}nBtrAt ¡ \} }}}}}}tddƒ�}|D ]}| d¡r0t| ¡ d ƒ}q!W d  ƒ n1 s;w   Y  ntrNt ¡ \} }}}}}}t	 
| |||¡S )z*Return various CPU stats as a named tuple.z
/proc/statrr   s   intrr   N)r	   ru   Ú	cpu_statsr
   rw   rx   ry   rz   r   r   Ú	scpustats)	ÚctxswÚintrsÚ
soft_intrsÚsyscallsÚtrapsÚfaultsÚforksr|   r}   r   r   r€   r      s"   ÿ
€þÿ€ÿr    c              	   C   sL   g }t  ¡ }|D ]}|\}}}}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)ru   Údisk_partitionsr   Ú	sdiskpartr‰   )ÚallÚretlistÚ
partitionsÚ	partitionÚdeviceÚ
mountpointÚfstypeÚoptsÚmaxfileÚmaxpathÚntupler   r   r€   r©   >  s   ÿr©   c                  C   sž   t ƒ  ¡ } i }| D ]C}zt |¡}t |¡}t |¡\}}W n ty7 } z|jtjkr-‚ W Y d}~q	d}~ww t	t
dƒrBt
 |¡}t
 ||||¡||< q	|S )z)Get NIC stats (isup, duplex, speed, mtu).NÚ	NicDuplex)Únet_io_countersÚkeysÚ
cext_posixÚ
net_if_mtuÚnet_if_is_runningÚnet_if_duplex_speedÚOSErrorÚerrnoÚENODEVÚhasattrr   r¶   Ú	snicstats)ÚnamesrŠ   rJ   ÚmtuÚisupÚduplexÚspeedÚerrr   r   r€   Únet_if_stats[  s"   


ÿ€þ

rÈ   c              
   C   s  t r7g }tƒ D ]-}z	t|ƒ | ¡}W n ttfy   Y qw |D ]}t|ƒ}| |¡ | tj	|Ž ¡ q q|S | tj
vrLtd| d dd„ t
D ƒ¡f ƒ‚t
|  \}}tƒ }tr]t d¡}nt ¡ }|D ]#}|\}	}
}}}}}|
|v r†||v r†t|	|
||||t|ƒ}| |¡ qct|ƒS )z System-wide network connections.ú+invalid %r kind argument; choose between %sú, c                 S   ó   g | ]}t |ƒ‘qS r   ©Úrepr©Ú.0Úxr   r   r€   Ú
<listcomp>�  ó    z#net_connections.<locals>.<listcomp>r•   )r   ÚpidsÚProcessÚconnectionsr   r   Úlistr‰   r   Úsconnr   Ú
ValueErrorÚjoinÚsetr
   ru   Únet_connectionsr   ÚTCP_STATUSESÚadd)ÚkindrŠ   ÚpidÚconsÚconnÚfamiliesÚtypesÚrawlistrŒ   ÚfdÚfamÚtypeÚladdrÚraddrr   Úntr   r   r€   rÛ   o  s@   
ÿ
ý
ÿÿ
€rÛ   c                  C   sb   z	t  ¡ \} }}W n
 ty   Y dS w |dk}|rtj}n|dkr&tj}n|d }t | ||¡S )zReturn battery info.Nr   r•   é<   )ru   Úsensors_batteryr�   r   ÚPOWER_TIME_UNLIMITEDÚPOWER_TIME_UNKNOWNÚsbattery)rO   ÚminsleftÚpower_pluggedÚsecsleftr   r   r€   rì   ™  s   þrì   c               	   C   sr   t tƒ} tƒ }t|ƒD ]+}z t |¡\}}|dkrd}d| }| d  t ||||¡¡ W q t	y6   Y qw | S )z?Return CPU cores temperatures if available, else an empty dict.r   NzCore %sÚcoretemp)
r   rÖ   rŽ   Úrangeru   Úsensors_cpu_temperaturer‰   r   Úshwtempr�   )rŠ   Únum_cpusÚcpuÚcurrentÚhighrJ   r   r   r€   Úsensors_temperatures©  s   ÿÿrû   c               
   C   sÒ   g } t ƒ }t|ƒD ]]}z	t |¡\}}W n	 ty   Y q	w |r\zt| d¡d  d¡d ƒ}W n ttfy=   d}Y nw zt| d¡d  d¡d ƒ}W n ttfy[   d}Y nw |  	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•   ú/r   N)rŽ   rô   ru   Úcpu_frequencyr�   ry   rz   Ú
IndexErrorrØ   r‰   r   Úscpufreq)rŠ   r÷   rø   rù   Úavailable_freqÚmin_freqÚmax_freqr   r   r€   Úcpu_freqº  s*   ÿ ÿ ÿr  c                   C   r‘   )z:The system boot time expressed in seconds since the epoch.)ru   Ú	boot_timer   r   r   r€   r  Ø  r’   r  c            	      C   sf   g } t  ¡ }|D ](}|\}}}}}|dkrtsJ ‚d}|dkr qt ||p&d|||¡}|  |¡ q| S )z:Return currently connected users as a list of namedtuples.r•   Nú~)ru   Úusersr   r   Úsuserr‰   )	r¬   rä   rŒ   rZ   ÚttyÚhostnameÚtstamprß   rê   r   r   r€   r  Ý  s   r  c                   C   s:   z	t dƒ ¡  W dS  ty   Y dS  ty   Y dS w )Nr   FT)rÔ   rJ   r   r   r   r   r   r€   Ú_pid_0_existsò  s   ûÿr  c                  C   s*   t  ¡ } trd| vrtƒ r|  dd¡ | S )z7Returns a list of PIDs currently running on the system.r   )ru   rÓ   r   r  Úinsert)rŠ   r   r   r€   rÓ   þ  s   rÓ   c                 C   s   t  | ¡}|s| tƒ v S dS )zReturn True if pid exists.T)r   Ú
pid_existsrÓ   )rß   Úexistsr   r   r€   r  	  s   

r  c                 C   s4   zt  | ¡td  }|t jkW S  ty   Y dS w )Nr   F)ru   Úproc_oneshot_infoÚkinfo_proc_mapÚSZOMBÚ	Exception)rß   Ústr   r   r€   Ú	is_zombie  s   ÿr  c                    s   t  ˆ ¡‡ fdd„ƒ}|S )z`Decorator which translates bare OSError exceptions into
    NoSuchProcess and AccessDenied.
    c                    sž   zˆ | g|¢R i |¤ŽW S  t y(   t| jƒr!t| j| j| jƒ‚t| j| jƒ‚ ty5   t| j| jƒ‚ t	yN   | jdkrMdt
ƒ v rLt| j| jƒ‚‚ ‚ w ©Nr   )r   r  rß   r   Ú_nameÚ_ppidr   r   r   r½   rÓ   )ÚselfÚargsÚkwargs©Úfunr   r€   Úwrapper"  s   


úz wrap_exceptions.<locals>.wrapper)Ú	functoolsÚwraps)r  r  r   r  r€   Úwrap_exceptions  s   r!  c              	   c   sf   � zdV  W dS  t tfy%   t| jƒrt| j| j| jƒ‚t| j| jƒ‚ ty2   t	| j| jƒ‚w )z8Same as above, for routines relying on reading /proc fs.N)
r   r   r  rß   r   r  r  r   r   r   )Úinstr   r   r€   Úwrap_exceptions_procfs7  s   €
ÿr#  c                   @   sÞ  e Zd ZdZg d¢Zdd„ Zdd„ Zeedd„ ƒƒZ	d	d
„ Z
dd„ Zedd„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZer`edd „ ƒZed!d"„ ƒZeZed#d$„ ƒZed%d&„ ƒZed'd(„ ƒZed)d*„ ƒZedLd,d-„ƒZedMd/d0„ƒZed1d2„ ƒZed3d4„ ƒZ ed5d6„ ƒZ!ed7d8„ ƒZ"ed9d:„ ƒZ#e$d;d<ƒZ%e$d;d=ƒZ&d>d?„ Z'e(rÃed@dA„ ƒZ)ne'Z)e*rÎedBdC„ ƒZ+ne'Z+eríedDdE„ ƒZ,edFdG„ ƒZ-edHdI„ ƒZ.edMdJdK„ƒZ/d.S d.S )NrÔ   z1Wrapper class around underlying C implementation.)rß   r  r  Ú_cachec                 C   s   || _ d | _d | _d S ©N)rß   r  r  )r  rß   r   r   r€   Ú__init__M  s   
zProcess.__init__c                 C   s   t  | j¡ dS )z+Raise NSP if the process disappeared on us.N)ru   Ú	proc_namerß   ©r  r   r   r€   Ú_assert_aliveR  s   zProcess._assert_alivec                 C   s$   t  | j¡}t|ƒttƒksJ ‚|S )z;Retrieves multiple process info in one shot as a raw tuple.)ru   r  rß   rš   r  ©r  rŠ   r   r   r€   ÚoneshotX  s   zProcess.oneshotc                 C   ó   | j  | ¡ d S r%  )r+  Úcache_activater(  r   r   r€   Úoneshot_enter`  ó   zProcess.oneshot_enterc                 C   r,  r%  )r+  Úcache_deactivater(  r   r   r€   Úoneshot_exitc  r/  zProcess.oneshot_exitc                 C   s(   |   ¡ td  }|d ur|S t | j¡S )NrJ   )r+  r  ru   r'  rß   )r  rJ   r   r   r€   rJ   f  s   zProcess.namec                 C   sŒ   t r| jdkr	dS t | j¡S tr6| jdkrdS t| ƒ� t d| j ¡W  d   ƒ S 1 s/w   Y  d S |  ¡ }|rDt	|d ƒpCdS dS )Nr   Ú z/proc/%s/exe)
r	   rß   ru   Úproc_exer
   r#  ÚosÚreadlinkÚcmdliner   )r  r6  r   r   r€   Úexek  s   


$ÿzProcess.exec              
   C   s    t r	| jdkr	g S trJzt | j¡W S  tyI } z+|jtjkrDt| jƒr.t	| j| j
| jƒ‚t| jƒs<t| j| j
| jƒ‚g W  Y d }~S ‚ d }~ww t | j¡S r  )r   rß   r
   ru   Úproc_cmdliner½   r¾   ÚEINVALr  r   r  r  r  r   )r  rÇ   r   r   r€   r6  ƒ  s    

€õzProcess.cmdlinec                 C   ó   t  | j¡S r%  )ru   Úproc_environrß   r(  r   r   r€   Úenviron�  ó   zProcess.environc                 C   s8   |   ¡ td  }t ¡ }z|| W S  ty   Y d S w )Nr*   )r+  r  r   Úget_terminal_mapÚKeyError)r  Útty_nrÚtmapr   r   r€   Úterminal¡  s   
ÿzProcess.terminalc                 C   s   |   ¡ td  | _| jS )Nr   )r+  r  r  r(  r   r   r€   r   ª  s   zProcess.ppidc                 C   ó.   |   ¡ }t |td  |td  |td  ¡S )Nr   r    r"   )r+  r   Úpuidsr  ©r  Úrawtupler   r   r€   Úuids¯  ó   


ýzProcess.uidsc                 C   rC  )Nr$   r&   r(   )r+  r   Úpgidsr  rE  r   r   r€   Úgids·  rH  zProcess.gidsc                 C   s8   |   ¡ }t |td  |td  |td  |td  ¡S )Nr6   r8   r:   r<   )r+  r   rc   r  rE  r   r   r€   r‡   ¿  s   



üzProcess.cpu_timesc                 C   ó   |   ¡ td  S )NrH   ©r+  r  r(  r   r   r€   Úcpu_numÉ  ó   zProcess.cpu_numc                 C   s@   |   ¡ }t|td  |td  |td  |td  |td  ƒS )Nr>   r@   rB   rD   rF   )r+  r_   r  rE  r   r   r€   Úmemory_infoÍ  s   




ûzProcess.memory_infoc                 C   rK  )Nr,   rL  r(  r   r   r€   r,   Ù  rN  zProcess.create_timec                 C   s   t rt | j¡S t|  ¡ ƒS r%  )ÚHAS_PROC_NUM_THREADSru   r   rß   rš   Úthreadsr(  r   r   r€   Únum_threadsÝ  s   zProcess.num_threadsc                 C   s$   |   ¡ }t |td  |td  ¡S )Nr.   r0   )r+  r   Úpctxswr  rE  r   r   r€   Únum_ctx_switcheså  s
   

þzProcess.num_ctx_switchesc                 C   sH   t  | j¡}g }|D ]\}}}t |||¡}| |¡ q
tr"|  ¡  |S r%  )ru   Úproc_threadsrß   r   Úpthreadr‰   r   r)  )r  rä   r¬   Ú	thread_idÚutimeÚstimerµ   r   r   r€   rQ  ì  s   zProcess.threadsÚinetc              	   C   s  |t vrtd|d dd„ t D ƒ¡f ƒ‚trXt | \}}g }t | j¡}|D ])}|\}}}	}
}}}|| jks8J ‚||v rO|	|v rOt|||	|
||tƒ}| 	|¡ q&|  
¡  t|ƒS t | \}}t | j||¡}g }|D ]}|\}}}	}
}}t|||	|
||tƒ}| 	|¡ qjtrŠ|  
¡  |S )NrÉ   rÊ   c                 S   rË   r   rÌ   rÎ   r   r   r€   rÑ   ü  rÒ   z'Process.connections.<locals>.<listcomp>)r   rØ   rÙ   r
   ru   rÛ   rß   r   rÜ   r‰   r)  rÖ   Úproc_connectionsr   )r  rÞ   râ   rã   rŠ   rä   rŒ   rå   ræ   rç   rè   ré   r   rß   rê   r   r   r€   rÕ   ø  s>   ÿÿ
€ÿzProcess.connectionsNc                 C   s   t  | j|| j¡S r%  )r   Úwait_pidrß   r  )r  Útimeoutr   r   r€   Úwait  r”   zProcess.waitc                 C   r:  r%  )r¹   Úgetpriorityrß   r(  r   r   r€   Únice_get  r=  zProcess.nice_getc                 C   s   t  | j|¡S r%  )r¹   Úsetpriorityrß   )r  Úvaluer   r   r€   Únice_set"  s   zProcess.nice_setc                 C   s   |   ¡ td  }t |d¡S )Nr   ú?)r+  r  ÚPROC_STATUSESÚget)r  Úcoder   r   r€   r   &  s   zProcess.statusc                 C   s(   |   ¡ }t |td  |td  dd¡S )Nr2   r4   r•   )r+  r   Úpior  rE  r   r   r€   Úio_counters,  s   

üzProcess.io_countersc                 C   s<   t r	| jdkr	dS tstrt | j¡pdS ttrdƒ‚dƒ‚)z)Return process current working directory.r   Nr�   r2  )r   rß   r
   ÚHAS_PROC_OPEN_FILESru   Úproc_cwdr�   r	   r(  r   r   r€   Úcwd5  s   ÿÿþzProcess.cwdÚmmaprg   ri   c                 C   s   t ‚r%  )r�   r(  r   r   r€   Ú_not_implementedJ  s   zProcess._not_implementedc                 C   s   t  | j¡}dd„ |D ƒS )z8Return files opened by process as a list of namedtuples.c                 S   s   g | ]
\}}t  ||¡‘qS r   )r   Ú	popenfile)rÏ   Úpathrå   r   r   r€   rÑ   T  s    z&Process.open_files.<locals>.<listcomp>)ru   r   rß   )r  rä   r   r   r€   Ú
open_filesP  s   zProcess.open_filesc                 C   s   t  | j¡}tr|  ¡  |S )z=Return the number of file descriptors opened by this process.)ru   r   rß   r
   r)  r*  r   r   r€   Únum_fds[  s   zProcess.num_fdsc                 C   r:  r%  )ru   Úproc_cpu_affinity_getrß   r(  r   r   r€   Úcpu_affinity_geti  r=  zProcess.cpu_affinity_getc              
   C   s˜   t tttƒ ƒƒƒ}|D ]}||vrtd||f ƒ‚qz
t | j|¡ W d S  tyK } z|j	t	j
t	jfv rF|D ]}||vrEtd||f ƒ‚q7‚ d }~ww )Nz#invalid CPU #%i (choose between %s))Útuplerô   rš   r   rØ   ru   Úproc_cpu_affinity_setrß   r½   r¾   r9  ÚEDEADLK)r  ÚcpusÚallcpusrø   rÇ   r   r   r€   Úcpu_affinity_setm  s,   ÿÿÿÿÿ€õzProcess.cpu_affinity_setc                 C   r:  r%  )ru   Úproc_memory_mapsrß   r(  r   r   r€   Úmemory_maps†  r=  zProcess.memory_mapsc                 C   sL   |d u rt  | j|¡S t|ƒdkrtdt|ƒ ƒ‚|\}}t  | j|||¡S )Nr   z4second argument must be a (soft, hard) tuple, got %s)ru   Úproc_getrlimitrß   rš   rØ   rÍ   Úproc_setrlimit)r  ÚresourceÚlimitsÚsoftÚhardr   r   r€   ÚrlimitŠ  s   ÿÿzProcess.rlimit)rZ  r%  )0Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú	__slots__r&  r)  r!  r   r+  r.  r1  rJ   r7  r6  r<  rB  r   rG  rJ  r‡   r	   rM  rO  Úmemory_full_infor,   rR  rT  rQ  rÕ   r^  r`  rc  r   ri  rl  r   Únt_mmap_groupedÚnt_mmap_extrn  rj  rq  ÚHAS_PROC_NUM_FDSrr  rt  rz  r|  rƒ  r   r   r   r€   rÔ   H  s¢    










	



!




ÿÿ


ÜrÔ   r   )F)~r‡  Ú
contextlibr¾   r  r4  Úxml.etree.ElementTreeÚetreeÚElementTreer˜   Úcollectionsr   r   r2  r   r   r   ru   r   r¹   r	   r
   r   r   r   r   r   r   r   r   r   Ú_compatr   r   r   r   Ú__extra__all__ÚSIDLÚSTATUS_IDLEÚSRUNÚSTATUS_RUNNINGÚSSLEEPÚSTATUS_SLEEPINGÚSSTOPÚSTATUS_STOPPEDr  ÚSTATUS_ZOMBIEÚSWAITÚSTATUS_WAITINGÚSLOCKÚSTATUS_LOCKEDre  ÚSDEADÚSTATUS_WAKINGÚSONPROCÚTCPS_ESTABLISHEDÚCONN_ESTABLISHEDÚTCPS_SYN_SENTÚCONN_SYN_SENTÚTCPS_SYN_RECEIVEDÚCONN_SYN_RECVÚTCPS_FIN_WAIT_1ÚCONN_FIN_WAIT1ÚTCPS_FIN_WAIT_2ÚCONN_FIN_WAIT2ÚTCPS_TIME_WAITÚCONN_TIME_WAITÚTCPS_CLOSEDÚ
CONN_CLOSEÚTCPS_CLOSE_WAITÚCONN_CLOSE_WAITÚTCPS_LAST_ACKÚCONN_LAST_ACKÚTCPS_LISTENÚCONN_LISTENÚTCPS_CLOSINGÚCONN_CLOSINGÚPSUTIL_CONN_NONEÚ	CONN_NONErÜ   ÚgetpagesizeÚPAGESIZEÚAF_LINKrÀ   ÚHAS_PER_CPU_TIMESrP  rj  rŒ  Údictr  rL   rX   r_   Úpfullmemrc   rf   rh   rj   r�   r†   r‡   r   r�   rŽ   r“   r    r©   Ú
disk_usageÚdisk_io_countersr·   Únet_if_addrsrÈ   rÛ   rì   rû   r  r  r  r  rÓ   r  r  r!  Úcontextmanagerr#  ÚobjectrÔ   r   r   r   r€   Ú<module>   sh  ù	íú
ô



ÿþýüûúùø	÷
öõôóòñðïîíìëêéèç#ÿÿÿÿÿ	
	

#(




