
­­­­­­­­­­­­­­­­­­
<!DOCTYPE html>
<html>
U
    =_VD                     @   s  d Z ddlZddlZddlZddl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 ZejZ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j*ej+ej,ej-ej.ej/ej0ej1ej2ej3ej4ej5iZ6ej7ej8ej9ej:ej;ej<ej=ej>ej?ej@iZAeBddddddddddddZCeBdddddddddZDedd d!d"d#gZEed$d%d&d'd(d)d*d+d,gZFed-d.d/d0d1gZGed2eGjHd3 ZId4d5 ZJd6d7 ZKd8d9 ZLd:d; ZMd<d= ZNd>d? ZOd@dA ZPdBdC ZQe	jRZRejSZSd\dEdFZTdGdH ZUejVZVejWZWd]dJdKZXdLdM ZYdNdO ZZdPdQ Z[dRdS Z\e	j]Z]dTdU Z^dVdW Z_ej`dXdY ZaG dZd[ d[ebZcdS )^zmacOS 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pmemr)   r*   r+   r,   pfullmem)ussc            	   	   C   sT   t  \} }}}}}|| }|| }||8 }t| | | dd}t| |||||||S )z&System virtual memory as a namedtuple.r   round_)cextZvirtual_memr   r4   )	r5   r9   r:   r;   r8   ZspeculativeZavailr7   r6    rB   @/opt/alt/python38/lib64/python3.8/site-packages/psutil/_psosx.pyvirtual_memoryp   s      rD   c                  C   s4   t  \} }}}}t|| dd}t| |||||S )z=Swap system memory as a (total, used, free, sin, sout) tuple.r   r?   )rA   Zswap_memr   r   sswap)r5   r7   r8   sinsoutr6   rB   rB   rC   swap_memory   s    rH   c                  C   s   t  \} }}}t| |||S )z(Return system CPU times as a namedtuple.)rA   	cpu_timesr/   )r0   r1   r2   r3   rB   rB   rC   rI      s    rI   c                  C   s:   g } t  D ](}|\}}}}t||||}| | q| S )z(Return system CPU times as a named tuple)rA   per_cpu_timesr/   append)retZcpu_tr0   r1   r2   r3   itemrB   rB   rC   rJ      s    rJ   c                   C   s   t  S )z0Return the number of logical CPUs in the system.)rA   cpu_count_logicalrB   rB   rB   rC   rN      s    rN   c                   C   s   t  S )z1Return the number of physical CPUs in the system.)rA   Zcpu_count_physrB   rB   rB   rC   cpu_count_physical   s    rO   c                  C   s"   t  \} }}}}t| |||S N)rA   	cpu_statsr   	scpustats)ctx_switches
interruptssoft_interruptssyscallsZtrapsrB   rB   rC   rQ      s       rQ   c                  C   s   t  \} }}t| ||gS )zReturn 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_freqr   scpufreq)currZmin_Zmax_rB   rB   rC   rW      s    rW   Fc              	   C   sv   g }t  }|D ]`}|\}}}}|dkr,d}| sJtj|rtj|sJqd }}	t||||||	}
||
 q|S )z8Return mounted disk partitions as a list of namedtuples.Znone N)	rA   disk_partitionsospathisabsexistsr   	sdiskpartrK   )allretlist
partitions	partitiondevice
mountpointfstypeoptsmaxfilemaxpathntuplerB   rB   rC   r[      s      r[   c                  C   sd   zt  \} }}W n tk
r(   Y dS X |dk}|r>tj}n|dkrNtj}n|d }t| ||S )zReturn battery information.Nr   <   )rA   sensors_batteryNotImplementedErrorr   POWER_TIME_UNLIMITEDPOWER_TIME_UNKNOWNsbattery)r6   Zminsleftpower_pluggedsecsleftrB   rB   rC   rn      s    rn   inetc              	   C   sl   g }t  D ]\}zt|| }W n tk
r8   Y q
Y q
X |r
|D ]"}t||g }|tj|  qBq
|S )z System-wide network connections.)pidsProcessconnectionsr   listrK   r   sconn)kindrL   pidZconscrB   rB   rC   net_connections   s    

r~   c                  C   s   t   } i }| D ]}z&t|}t|}t|\}}W n0 tk
rl } z|jtjkr\ W 5 d}~X Y qX t	t
drt
|}t
||||||< q|S )z)Get NIC stats (isup, duplex, speed, mtu).N	NicDuplex)net_io_counterskeys
cext_posixZ
net_if_mtuZnet_if_is_runningZnet_if_duplex_speedOSErrorerrnoZENODEVhasattrr   r   	snicstats)namesrL   r&   mtuisupduplexspeederrrB   rB   rC   net_if_stats  s    




r   c                   C   s   t  S )z:The system boot time expressed in seconds since the epoch.)rA   	boot_timerB   rB   rB   rC   r     s    r   c            	      C   s\   g } t  }|D ]F}|\}}}}}|dkr,q|s2qt||p>d|pDd||}| | q| S )z:Return currently connected users as a list of namedtuples.~N)rA   usersr   suserrK   )	rb   rawlistrM   r0   ttyhostnameZtstampr|   ntrB   rB   rC   r   "  s    r   c                  C   sd   t  } d| kr`ztd  | dd W n2 tk
r@   Y n  tk
r^   | dd Y nX | S Nr   )rA   rv   rw   create_timeinsertr   r   )ZlsrB   rB   rC   rv   6  s    rv   c                 C   s:   zt | td  }|t jkW S  tk
r4   Y dS X d S )Nr%   F)rA   proc_kinfo_oneshotkinfo_proc_mapSZOMB	Exception)r|   strB   rB   rC   	is_zombieI  s
    r   c                    s   t   fdd}|S )z`Decorator which translates bare OSError exceptions into
    NoSuchProcess and AccessDenied.
    c                    s   z | f||W S  t k
rR   t| jr@t| j| j| jnt| j| jY nH tk
rr   t| j| jY n( t	j
k
r   t| j| j| jY nX d S rP   )r   r   r|   r   _name_ppidr   r   r   rA   ZZombieProcessError)selfargskwargsfunrB   rC   wrapperU  s    
z wrap_exceptions.<locals>.wrapper)	functoolswraps)r   r   rB   r   rC   wrap_exceptionsQ  s    r   c                 c   s   z
dV  W n t tfk
r } zpt|ts6|jtjkrz|  }W n tk
rZ   |Y qX |tjkrzt	| j
| j| jqt| j
| jn W 5 d}~X Y nX dS )zThere 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)r   RuntimeError
isinstancer   ZESRCHr%   r   r   STATUS_ZOMBIEr   r|   r   r   r   )procr   r%   rB   rB   rC   catch_zombiee  s    


r   c                   @   sl  e Zd ZdZddddgZdd Zee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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@d1d2Zed3d4 ZedAd6d7Zed8d9 Zed:d; Z ed<d= Z!ed>d? Z"d5S )Brw   z1Wrapper class around underlying C implementation.r|   r   r   _cachec                 C   s   || _ d | _d | _d S rP   )r|   r   r   )r   r|   rB   rB   rC   __init__  s    zProcess.__init__c                 C   s$   t | j}t|ttks t|S rP   )rA   r   r|   lenr   AssertionErrorr   rL   rB   rB   rC   _get_kinfo_proc  s    zProcess._get_kinfo_procc              	   C   s8   t |  t| j}W 5 Q R X t|ttks4t|S rP   )r   rA   Zproc_pidtaskinfo_oneshotr|   r   pidtaskinfo_mapr   r   rB   rB   rC   _get_pidtaskinfo  s    
zProcess._get_pidtaskinfoc                 C   s   | j |  | j|  d S rP   )r   cache_activater   r   rB   rB   rC   oneshot_enter  s    zProcess.oneshot_enterc                 C   s   | j |  | j|  d S rP   )r   cache_deactivater   r   rB   rB   rC   oneshot_exit  s    zProcess.oneshot_exitc                 C   s(   |   td  }|d k	r|S t| jS )Nr&   )r   r   rA   Z	proc_namer|   )r   r&   rB   rB   rC   r&     s    zProcess.namec              
   C   s,   t |  t| jW  5 Q R  S Q R X d S rP   )r   rA   Zproc_exer|   r   rB   rB   rC   exe  s    
zProcess.exec              
   C   s,   t |  t| jW  5 Q R  S Q R X d S rP   )r   rA   Zproc_cmdliner|   r   rB   rB   rC   cmdline  s    
zProcess.cmdlinec              
   C   s0   t |  tt| jW  5 Q R  S Q R X d S rP   )r   r   rA   Zproc_environr|   r   rB   rB   rC   environ  s    
zProcess.environc                 C   s   |   td  | _| jS )Nr   )r   r   r   r   rB   rB   rC   r     s    zProcess.ppidc              
   C   s,   t |  t| jW  5 Q R  S Q R X d S rP   )r   rA   Zproc_cwdr|   r   rB   rB   rC   cwd  s    
zProcess.cwdc                 C   s.   |   }t|td  |td  |td  S )Nr   r   r   r   r   puidsr   r   ZrawtuplerB   rB   rC   uids  s    


zProcess.uidsc                 C   s.   |   }t|td  |td  |td  S )Nr    r!   r"   r   r   rB   rB   rC   gids  s    


zProcess.gidsc                 C   s>   |   td  }t }z
|| W S  tk
r8   Y d S X d S )Nr#   )r   r   r   Zget_terminal_mapKeyError)r   Ztty_nrZtmaprB   rB   rC   terminal  s    
zProcess.terminalc                 C   s6   |   }t|td  |td  |td  |td  S )Nr)   r*   r+   r,   )r   r<   r   r   rB   rB   rC   memory_info  s    



zProcess.memory_infoc                 C   s"   |   }t| j}t||f  S rP   )r   rA   Zproc_memory_ussr|   r=   )r   Z	basic_memr>   rB   rB   rC   memory_full_info  s    zProcess.memory_full_infoc                 C   s(   |   }t|td  |td  ddS )Nr'   r(   g        )r   r   	pcputimesr   r   rB   rB   rC   rI     s    

 zProcess.cpu_timesc                 C   s   |   td  S )Nr$   )r   r   r   rB   rB   rC   r     s    zProcess.create_timec                 C   s   |   td  }t|dS )Nr.   r   )r   r   r   pctxsw)r   ZvolrB   rB   rC   num_ctx_switches  s    zProcess.num_ctx_switchesc                 C   s   |   td  S )Nr-   )r   r   r   rB   rB   rC   num_threads  s    zProcess.num_threadsc              	   C   sb   | j dkrg S g }t|  t| j }W 5 Q R X |D ]&\}}t|r6t||}|| q6|S r   )r|   r   rA   Zproc_open_filesr   r   	popenfilerK   )r   filesr   r]   fdrk   rB   rB   rC   
open_files  s    

zProcess.open_filesru   c              	   C   s   |t kr(td|ddd t D f t | \}}t|  t| j||}W 5 Q R X g }|D ]2}|\}}}	}
}}t|||	|
||t}|	| q`|S )Nz+invalid %r kind argument; choose between %sz, c                 S   s   g | ]}t |qS rB   )repr).0xrB   rB   rC   
<listcomp>  s     z'Process.connections.<locals>.<listcomp>)
r	   
ValueErrorjoinr   rA   Zproc_connectionsr|   r
   TCP_STATUSESrK   )r   r{   Zfamiliestypesr   rL   rM   r   famtypeladdrraddrr%   r   rB   rB   rC   rx     s    
zProcess.connectionsc              
   C   s:   | j dkrdS t|  t| j W  5 Q R  S Q R X d S r   )r|   r   rA   Zproc_num_fdsr   rB   rB   rC   num_fds  s    

zProcess.num_fdsNc                 C   s   t | j|| jS rP   )r   Zwait_pidr|   r   )r   timeoutrB   rB   rC   wait&  s    zProcess.waitc              
   C   s,   t |  t| jW  5 Q R  S Q R X d S rP   )r   r   getpriorityr|   r   rB   rB   rC   nice_get*  s    
zProcess.nice_getc              
   C   s.   t |  t| j|W  5 Q R  S Q R X d S rP   )r   r   setpriorityr|   )r   valuerB   rB   rC   nice_set/  s    
zProcess.nice_setc                 C   s   |   td  }t|dS )Nr%   ?)r   r   PROC_STATUSESget)r   coderB   rB   rC   r%   4  s    zProcess.statusc                 C   s<   t | j}g }|D ]"\}}}t|||}|| q|S rP   )rA   Zproc_threadsr|   r   pthreadrK   )r   r   rb   Z	thread_idutimeZstimerk   rB   rB   rC   threads:  s    zProcess.threads)ru   )N)#__name__
__module____qualname____doc__	__slots__r   r   r   r   r   r   r   r&   r   r   r   r   r   r   r   r   r   r   rI   r   r   r   r   rx   r   r   r   r   r%   r   rB   rB   rB   rC   rw     sr   









	









rw   )F)ru   )dr   
contextlibr   r   r\   collectionsr   rZ   r   r   r   rA   r   r   r   r	   r
   r   r   r   r   r   r   _compatr   r   Z__extra__all__ZgetpagesizeZPAGESIZEZAF_LINKZTCPS_ESTABLISHEDCONN_ESTABLISHEDZTCPS_SYN_SENTCONN_SYN_SENTZTCPS_SYN_RECEIVEDCONN_SYN_RECVZTCPS_FIN_WAIT_1CONN_FIN_WAIT1ZTCPS_FIN_WAIT_2CONN_FIN_WAIT2ZTCPS_TIME_WAITCONN_TIME_WAITZTCPS_CLOSED
CONN_CLOSEZTCPS_CLOSE_WAITCONN_CLOSE_WAITZTCPS_LAST_ACKCONN_LAST_ACKZTCPS_LISTENCONN_LISTENZTCPS_CLOSINGCONN_CLOSINGZPSUTIL_CONN_NONE	CONN_NONEr   ZSIDLSTATUS_IDLEZSRUNSTATUS_RUNNINGZSSLEEPSTATUS_SLEEPINGZSSTOPSTATUS_STOPPEDr   r   r   dictr   r   r/   r4   r<   _fieldsr=   rD   rH   rI   rJ   rN   rO   rQ   rW   
disk_usageZdisk_io_countersr[   rn   r   Znet_if_addrsr~   r   r   r   rv   Z
pid_existsr   r   contextmanagerr   objectrw   rB   rB   rB   rC   <module>   s                     
  



