o
    ˆ¶¹a ‘  ã                   @   s.  d Z ddlZddlZddl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 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% zddl
mZ& W n, e'yî Z( z e)e(ƒ *¡  +d¡rée ,¡ d d k réd!Z-e-d"7 Z-e-d#7 Z-e.e-ƒ‚‚ dZ([(ww ej/d$krùddl0Z0ndZ0g d%¢Z1d&Z2d'Z3d(ej4v Z5e0du �rd)Z6ne0 7d*d+d)i¡Z8e8j6Z6e&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&jMejNe&jOe2e&jPejQiZRe0du�reG d,d-„ d-e0j7ƒZSeTƒ  UeSjV¡ e0du �rsdZWdZXd.ZYd/ZZnG d0d1„ d1e0j7ƒZ[eTƒ  Ue[jV¡ e\d¦i d2d“d3d“d4d.“d5d/“d6d7“d8d9“d:d “d;d<“d=d>“d?d@“dAdB“dCdD“dEdF“dGdH“dIdJ“dKdL“dMdN“dOdP“dQdR“dSdT“dUdV“dWdX“ŽZ]e	dYg dZ¢ƒZ^e	d[g d\¢ƒZ_e	d]g d^¢ƒZ`e	d_e`jad` ƒZbe	dadbdcgƒZce	dddedf decja¡ ƒZee	dgg dh¢ƒZfedidj�dkdl„ ƒZgdmdn„ Zhedodp„ ƒZidqdr„ Zjdsdt„ Zke&jlZldudv„ Zmdwdx„ Zndydz„ Zod{d|„ Zpd}d~„ Zqdd€„ Zrd�d‚„ Zsdƒd„„ Ztd…aud†d‡„ Zvd§dˆd‰„ZwdŠd‹„ ZxdŒd�„ ZydŽd�„ Zzd�d‘„ Z{da|d’d“„ Z}d”d•„ Z~d–d—„ Zd˜d™„ Z€G dšd›„ d›e�ƒZ‚e&jƒZƒe&j„Z„e&j…Z…dœd�„ Z†d¨dždŸ„Z‡d d¡„ Zˆd¢d£„ Z‰G d¤d¥„ d¥e�ƒZŠdS )©z Windows platform implementation.é    N)Ú
namedtupleé   )Ú_common)ÚENCODING)ÚENCODING_ERRS)ÚAccessDenied)ÚNoSuchProcess)ÚTimeoutExpired)Ú	conn_tmap)Úconn_to_ntuple)Údebug)Úisfile_strict)Úmemoize)Úmemoize_when_activated)Úparse_environ_block)Úusage_percent)ÚPY3)Úlong)Ú	lru_cache©Úrange)Úunicode)ÚABOVE_NORMAL_PRIORITY_CLASS)ÚBELOW_NORMAL_PRIORITY_CLASS)ÚHIGH_PRIORITY_CLASS)ÚIDLE_PRIORITY_CLASS)ÚNORMAL_PRIORITY_CLASS)ÚREALTIME_PRIORITY_CLASS)Ú_psutil_windowszdll load failedé   z3this Windows version is too old (< Windows Vista); z:psutil 3.4.2 is the latest version which supports Windows z2000, XP and 2003 server)é   é   )Úwin_service_iterÚwin_service_getr   r   r   r   r   r   ÚIOPRIO_VERYLOWÚ
IOPRIO_LOWÚIOPRIO_NORMALÚIOPRIO_HIGHÚCONN_DELETE_TCBÚAF_LINKÚ
DELETE_TCBi+  Ú__pypy__éÿÿÿÿÚAddressFamilyr)   c                   @   s$   e Zd ZeZeZeZeZeZeZdS )ÚPriorityN)	Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   © r2   r2   ú3/usr/lib/python3/dist-packages/psutil/_pswindows.pyr.   n   s    r.   é   r    c                   @   s   e Zd ZdZdZdZdZdS )Ú
IOPriorityr   r   r4   r    N)r/   r0   r1   r$   r%   r&   r'   r2   r2   r2   r3   r5   ~   s
    r5   Únum_handlesÚctx_switchesÚ	user_timeÚkernel_timeÚcreate_timer!   Únum_threadsé   Ú	io_rcountÚ	io_wcounté   Ú	io_rbytesé   Ú	io_wbytesé	   Úio_count_othersé
   Úio_bytes_othersé   Únum_page_faultsé   Ú	peak_wseté   Úwseté   Úpeak_paged_poolé   Ú
paged_poolé   Úpeak_non_paged_poolé   Únon_paged_poolé   Úpagefileé   Úpeak_pagefileé   Úmem_privateé   Ú	scputimes)ÚuserÚsystemÚidleÚ	interruptÚdpcÚsvmem)ÚtotalÚ	availableÚpercentÚusedÚfreeÚpmem)ÚrssÚvmsrH   rJ   rL   rN   rP   Úpeak_nonpaged_poolÚnonpaged_poolrV   rX   ÚprivateÚpfullmem)ÚussÚpmmap_groupedÚpathri   Ú	pmmap_extzaddr perms ú Úpio)Ú
read_countÚwrite_countÚ
read_bytesÚwrite_bytesÚother_countÚother_bytesi   )Úmaxsizec                 C   s@   d  |  d¡dd… ¡}t |¡}| t|ƒd… }tj  ||¡S )z�Convert paths using native DOS format like:
        "\Device\HarddiskVolume1\Windows\systemew\file.txt"
    into:
        "C:\Windows\systemew\file.txt"
    ú\Nr    )ÚjoinÚsplitÚcextÚQueryDosDeviceÚlenÚosrq   )ÚsÚrawdriveÚdriveletterÚ	remainderr2   r2   r3   Úconvert_dos_pathÁ   s   
r‡   c                 C   s"   t r| S t| tƒr| S |  tt¡S )zmEncode a unicode string to a byte string by using the default fs
    encoding + "replace" error handler.
    )r   Ú
isinstanceÚstrÚencoder   r   )rƒ   r2   r2   r3   Úpy2_strencodeÎ   s
   
r‹   c                   C   ó   t  ¡ S ©N)r   Úgetpagesizer2   r2   r2   r3   rŽ   Û   ó   rŽ   c                  C   sN   t  ¡ } | \}}}}}}|}|}|}	|| }
t|| |dd�}t||||
|	ƒS )z&System virtual memory as a namedtuple.r   ©Úround_)r   Úvirtual_memr   rb   )ÚmemÚtotphysÚ	availphysÚtotpagefÚ
availpagefÚtotvirtÚfreevirtrc   Úavailrg   rf   re   r2   r2   r3   Úvirtual_memoryå   s   r›   c            	      C   sh   t  ¡ } | d }| d }| d }| d }|| }t||| ƒ}|| }t||dd�}t ||||dd¡S )z=Swap system memory as a (total, used, free, sin, sout) tuple.r   r   r4   r    r�   )r   r’   Úminr   r   Ússwap)	r“   Ú
total_physÚ	free_physÚtotal_systemÚfree_systemrc   rg   rf   re   r2   r2   r3   Úswap_memoryò   s   r¢   c                 C   sP   t rt| tƒr| jtdd�} t | ¡\}}|| }t||dd�}t 	||||¡S )z'Return disk usage associated with path.Ústrict)Úerrorsr   r�   )
r   rˆ   ÚbytesÚdecoder   r   Ú
disk_usager   r   Ú
sdiskusage)rq   rc   rg   rf   re   r2   r2   r3   r§     s   r§   c                 C   s   t  | ¡}dd„ |D ƒS )zReturn disk partitions.c                 S   s   g | ]}t j|Ž ‘qS r2   )r   Ú	sdiskpart©Ú.0Úxr2   r2   r3   Ú
<listcomp>  ó    z#disk_partitions.<locals>.<listcomp>)r   Údisk_partitions)ÚallÚrawlistr2   r2   r3   r¯     s   
r¯   c                  C   s<   t  ¡ \} }}tdd„ tt  ¡ Ž D ƒŽ }t| |||j|jƒS )z)Return system CPU times as a named tuple.c                 S   ó   g | ]}t |ƒ‘qS r2   )Úsum)r«   Únr2   r2   r3   r­   )  ó    zcpu_times.<locals>.<listcomp>)r   Ú	cpu_timesr\   ÚzipÚper_cpu_timesr`   ra   )r]   r^   r_   Úpercpu_summedr2   r2   r3   r¶   #  s
   ÿr¶   c                  C   s:   g } t  ¡ D ]\}}}}}t|||||ƒ}|  |¡ q| S )z6Return system per-CPU times as a list of named tuples.)r   r¸   r\   Úappend)Úretr]   r^   r_   r`   ra   Úitemr2   r2   r3   r¸   .  s
   r¸   c                   C   rŒ   )z0Return the number of logical CPUs in the system.)r   Úcpu_count_logicalr2   r2   r2   r3   r½   7  r�   r½   c                   C   rŒ   )z-Return the number of CPU cores in the system.)r   Úcpu_count_coresr2   r2   r2   r3   r¾   <  r�   r¾   c                  C   s$   t  ¡ \} }}}d}t | |||¡S )zReturn CPU statistics.r   )r   Ú	cpu_statsr   Ú	scpustats)r7   Ú
interruptsÚdpcsÚsyscallsÚsoft_interruptsr2   r2   r3   r¿   A  s
   
ÿr¿   c                  C   s(   t  ¡ \} }d}t t| ƒ|t|ƒ¡gS )zMReturn CPU frequency.
    On Windows per-cpu frequency is not supported.
    ç        )r   Úcpu_freqr   ÚscpufreqÚfloat)ÚcurrÚmax_Úmin_r2   r2   r3   rÆ   I  s   rÆ   Fc                  C   s*   t st ¡  da t ¡ } tdd„ | D ƒƒS )z~Return the number of processes in the system run queue averaged
    over the last 1, 5, and 15 minutes respectively as a tupleTc                 S   s   g | ]}t |d ƒ‘qS )r4   )Úround)r«   Úloadr2   r2   r3   r­   `  r®   zgetloadavg.<locals>.<listcomp>)Ú_loadavg_inititializedr   Úinit_loadavg_counterÚ
getloadavgÚtuple)Ú	raw_loadsr2   r2   r3   rÐ   U  s
   rÐ   c                 C   sš   | t vrtd| d dd„ t D ƒ¡f ƒ‚t |  \}}t |||¡}tƒ }|D ]"}|\}}}	}
}}}t|||	|
||t|dkr?|ndd�}| |¡ q&t	|ƒS )zˆReturn socket connections.  If pid == -1 return system-wide
    connections (as opposed to connections opened by one process only).
    z+invalid %r kind argument; choose between %sz, c                 S   r²   r2   )Úreprrª   r2   r2   r3   r­   n  rµ   z#net_connections.<locals>.<listcomp>r,   N)Úpid)
r
   Ú
ValueErrorr}   r   Únet_connectionsÚsetr   ÚTCP_STATUSESÚaddÚlist)ÚkindÚ_pidÚfamiliesÚtypesr±   r»   r¼   ÚfdÚfamÚtypeÚladdrÚraddrÚstatusrÔ   Úntr2   r2   r3   rÖ   h  s   ÿÿrÖ   c                  C   sx   i } t  ¡ }| ¡ D ]/\}}tst|tƒsJ t|ƒƒ‚t|ƒ}|\}}}}tt	dƒr/t	 
|¡}t	 ||||¡| |< q
| S )z)Get NIC stats (isup, duplex, speed, mtu).Ú	NicDuplex)r   Únet_if_statsÚitemsr   rˆ   r   rá   r‹   Úhasattrr   ræ   Ú	snicstats)r»   ÚrawdictÚnamerè   ÚisupÚduplexÚspeedÚmtur2   r2   r3   rç   z  s   

rç   c                  C   s   t  ¡ } tdd„ |  ¡ D ƒƒS )zsReturn network I/O statistics for every network interface
    installed on the system as a dict of raw tuples.
    c                 S   s   g | ]
\}}t |ƒ|f‘qS r2   ©r‹   )r«   ÚkÚvr2   r2   r3   r­   Ž  ó    z#net_io_counters.<locals>.<listcomp>)r   Únet_io_countersÚdictrè   ©r»   r2   r2   r3   rõ   ‰  s   rõ   c                  C   s8   g } t  ¡ D ]}t|ƒ}t|d ƒ|d< |  |¡ q| S )z,Return the addresses associated to each NIC.r   )r   Únet_if_addrsrÚ   r‹   rº   )r»   rè   r2   r2   r3   rø   ‘  s   rø   c                  C   sd   t  ¡ \} }}}| dk}t|d@ ƒ}t|d@ ƒ}|rdS |s |r$tj}n|dkr+tj}t |||¡S )zReturn battery information.r   é€   rA   Nr,   )r   Úsensors_batteryÚboolr   ÚPOWER_TIME_UNLIMITEDÚPOWER_TIME_UNKNOWNÚsbattery)Úacline_statusÚflagsre   ÚsecsleftÚpower_pluggedÚ
no_batteryÚchargingr2   r2   r3   rú      s   rú   c                  C   s(   t t ¡ ƒ} t| t ƒdkrtS | a| S )z:The system boot time expressed in seconds since the epoch.r   )rÈ   r   Ú	boot_timeÚabsÚ_last_btimer÷   r2   r2   r3   r  ¼  s
   r  c                  C   sH   g } t  ¡ }|D ]}|\}}}t|ƒ}t |d||d¡}|  |¡ q| S )z:Return currently connected users as a list of namedtuples.N)r   Úusersr‹   r   Úsuserrº   )Úretlistr±   r¼   r]   ÚhostnameÚtstamprå   r2   r2   r3   r  Ê  s   
r  c                  c   s,   � t  ¡ D ]\} }tt| ƒt|ƒƒV  qdS )z*Yields a list of WindowsService instances.N)r   Úwinservice_enumerateÚWindowsServicer‹   )rì   Údisplay_namer2   r2   r3   r"   Û  s   €ÿr"   c                 C   s   t | dƒ}| ¡ d |_|S )zBOpen a Windows service and return it as a WindowsService instance.Nr  )r  Ú_query_configÚ_display_name)rì   Úservicer2   r2   r3   r#   á  s   
r#   c                   @   sž   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
ejdd„ ƒZdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd$S )%r  z(Represents an installed Windows service.c                 C   s   || _ || _d S r�   )Ú_namer  )Úselfrì   r  r2   r2   r3   Ú__init__ë  s   
zWindowsService.__init__c                 C   s    d| j | jf }d| jj|f S )Nz(name=%r, display_name=%r)z%s%s)r  r  Ú	__class__r/   )r  Údetailsr2   r2   r3   Ú__str__ï  s   ÿzWindowsService.__str__c                 C   s   d|   ¡ t| ƒf S )Nz
<%s at %s>)r  Úid©r  r2   r2   r3   Ú__repr__ô  s   zWindowsService.__repr__c                 C   s   t |tƒstS | j|jkS r�   )rˆ   r  ÚNotImplementedr  ©r  Úotherr2   r2   r3   Ú__eq__÷  s   
zWindowsService.__eq__c                 C   s
   | |k S r�   r2   r  r2   r2   r3   Ú__ne__þ  s   
zWindowsService.__ne__c                 C   s\   |   ¡ � t | j¡\}}}}W d   ƒ n1 sw   Y  tt|ƒt|ƒt|ƒt|ƒd�S )N)r  ÚbinpathÚusernameÚ
start_type)Ú_wrap_exceptionsr   Úwinservice_query_configr  rö   r‹   )r  r  r!  r"  r#  r2   r2   r3   r    s   

ÿÿüzWindowsService._query_configc                 C   sP   |   ¡ � t | j¡\}}W d   ƒ n1 sw   Y  |dkr"d }t||d�S )Nr   )rä   rÔ   )r$  r   Úwinservice_query_statusr  rö   )r  rä   rÔ   r2   r2   r3   Ú_query_status  s   
ÿzWindowsService._query_statusc              
   c   sp   � zdV  W dS  t y7 } z$t|ƒrtd| jd| j d�‚|jtjtjfv r2td| jd| j d�‚‚ d}~ww )z{Ctx manager which translates bare OSError and WindowsError
        exceptions into NoSuchProcess and AccessDenied.
        Nz2service %r is not querable (not enough privileges)©rÔ   rì   Úmsgzservice %r does not exist))	ÚOSErrorÚis_permission_errr   r  Úwinerrorr   ÚERROR_INVALID_NAMEÚERROR_SERVICE_DOES_NOT_EXISTr   ©r  Úerrr2   r2   r3   r$    s*   €ÿþÿþ€ôzWindowsService._wrap_exceptionsc                 C   ó   | j S )z¢The service name. This string is how a service is referenced
        and can be passed to win_service_get() to get a new
        WindowsService instance.
        )r  r  r2   r2   r3   rì   *  s   zWindowsService.namec                 C   r1  )z_The service display name. The value is cached when this class
        is instantiated.
        )r  r  r2   r2   r3   r  1  s   zWindowsService.display_namec                 C   ó   |   ¡ d S )zwThe fully qualified path to the service binary/exe file as
        a string, including command line arguments.
        r!  ©r  r  r2   r2   r3   r!  7  ó   zWindowsService.binpathc                 C   r2  )z,The name of the user that owns this service.r"  r3  r  r2   r2   r3   r"  =  ó   zWindowsService.usernamec                 C   r2  )zRA string which can either be "automatic", "manual" or
        "disabled".
        r#  r3  r  r2   r2   r3   r#  A  r4  zWindowsService.start_typec                 C   r2  )zzThe process PID, if any, else None. This can be passed
        to Process class to control the service's process.
        rÔ   ©r'  r  r2   r2   r3   rÔ   I  r4  zWindowsService.pidc                 C   r2  )zService status as a string.rä   r6  r  r2   r2   r3   rä   O  r5  zWindowsService.statusc                 C   s   t t |  ¡ ¡ƒS )zService long description.)r‹   r   Úwinservice_query_descrrì   r  r2   r2   r3   ÚdescriptionS  ó   zWindowsService.descriptionc                 C   s>   |   ¡ }| |  ¡ ¡ |  ¡ |d< |  ¡ |d< |  ¡ |d< |S )zUUtility method retrieving all the information above as a
        dictionary.
        rì   r  r8  )r  Úupdater'  rì   r  r8  )r  Údr2   r2   r3   Úas_dictY  s   zWindowsService.as_dictN)r/   r0   r1   Ú__doc__r  r  r  r  r   r  r'  Ú
contextlibÚcontextmanagerr$  rì   r  r!  r"  r#  rÔ   rä   r8  r<  r2   r2   r2   r3   r  è  s(    
r  c                 C   s<   t | tƒs	J | ƒ‚| jtjtjfv pt| ddƒtjtjfv S )z*Return True if this is a permission error.r,  r,   )	rˆ   r*  ÚerrnoÚEPERMÚEACCESÚgetattrr   ÚERROR_ACCESS_DENIEDÚERROR_PRIVILEGE_NOT_HELD)Úexcr2   r2   r3   r+  –  s   ÿÿr+  c                 C   sB   t | tƒs	J | ƒ‚t| ƒrt||d�S | jtjkrt||d�S | ‚)z3Convert OSError into NoSuchProcess or AccessDenied.©rÔ   rì   )rˆ   r*  r+  r   r@  ÚESRCHr   )rF  rÔ   rì   r2   r2   r3   Úconvert_oserror¡  s   rI  c                    ó   t  ˆ ¡‡ fdd„ƒ}|S )zDDecorator which converts OSError into NoSuchProcess or AccessDenied.c              
      sD   zˆ | g|¢R i |¤ŽW S  t y! } z	t|| j| jd�‚d }~ww )NrG  )r*  rI  rÔ   r  )r  ÚargsÚkwargsr0  ©Úfunr2   r3   Úwrapper­  s   €ÿz wrap_exceptions.<locals>.wrapper©Ú	functoolsÚwraps©rN  rO  r2   rM  r3   Úwrap_exceptions«  s   rT  c                    rJ  )z€Workaround for https://github.com/giampaolo/psutil/issues/875.
    See: https://stackoverflow.com/questions/4457745#4457745
    c           	         sž   d}d}t |ƒD ]6}zˆ | g|¢R i |¤ŽW   S  ty> } z|}|jtkr9t |¡ t|d dƒ}W Y d }~q‚ d }~ww dˆ ||f }t| j| j	|d�‚)Nç-Cëâ6?é!   r4   ç{®Gáz¤?zI%s retried %s times, converted to AccessDenied as it's still returning %rr(  )
r   ÚWindowsErrorr,  ÚERROR_PARTIAL_COPYÚtimeÚsleeprœ   r   rÔ   r  )	r  rK  rL  ÚdelayÚtimesr¬   Ú_r0  r)  rM  r2   r3   rO  º  s$   

€ù	ÿz)retry_error_partial_copy.<locals>.wrapperrP  rS  r2   rM  r3   Úretry_error_partial_copy¶  s   r_  c                   @   sÀ  e Zd ZdZg d¢Zdd„ Zdd„ Zdd„ Zed	d
„ ƒZ	dd„ Z
ee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dd„ Zedd„ ƒZedd „ ƒZedMd"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d0d1„ ƒZeed2d3„ ƒƒZed4d5„ ƒZ edNd7d8„ƒZ!ed9d:„ ƒZ"ed;d<„ ƒZ#ed=d>„ ƒZ$ed?d@„ ƒZ%edAdB„ ƒZ&edCdD„ ƒZ'edEdF„ ƒZ(edGdH„ ƒZ)edIdJ„ ƒZ*edKdL„ ƒZ+d!S )OÚProcessz1Wrapper class around underlying C implementation.)rÔ   r  Ú_ppidÚ_cachec                 C   s   || _ d | _d | _d S r�   )rÔ   r  ra  )r  rÔ   r2   r2   r3   r  Õ  s   
zProcess.__init__c                 C   ó   | j  | ¡ | j | ¡ d S r�   )Ú
_proc_infoÚcache_activateÚexer  r2   r2   r3   Úoneshot_enterÜ  ó   zProcess.oneshot_enterc                 C   rc  r�   )rd  Úcache_deactivaterf  r  r2   r2   r3   Úoneshot_exità  rh  zProcess.oneshot_exitc                 C   s$   t  | j¡}t|ƒttƒksJ ‚|S )zOReturn multiple information about this process as a
        raw tuple.
        )r   Ú	proc_inforÔ   r�   Ú	pinfo_map©r  r»   r2   r2   r3   rd  ä  s   zProcess._proc_infoc                 C   s,   | j dkrdS | j dkrdS tj |  ¡ ¡S )zbReturn process name, which on Windows is always the final
        part of the executable.
        r   zSystem Idle Processr!   ÚSystem)rÔ   r‚   rq   Úbasenamerf  r  r2   r2   r3   rì   í  s
   

zProcess.namec              
   C   s‚   t r*zt | j¡}W n% ty) } z|jdkr$td| ƒ t| j| jƒ‚‚ d }~ww t | j¡}t	s6t
|ƒ}| d¡r?t|ƒS |S )Né   z%r translated into AccessDeniedr|   )ÚPYPYr   Úproc_exerÔ   rX  r@  r   r   r  r   r‹   Ú
startswithr‡   )r  rf  r0  r2   r2   r3   rf  ù  s    
€ú
zProcess.exec              
   C   sˆ   t jt jkr1z
t j| jdd�}W n( ty0 } zt|ƒr%t j| jdd�}n‚ W Y d }~nd }~ww t j| jdd�}tr=|S dd„ |D ƒS )NT)Úuse_pebFc                 S   r²   r2   rñ   )r«   rƒ   r2   r2   r3   r­      rµ   z#Process.cmdline.<locals>.<listcomp>)r   ÚWINVERÚWINDOWS_8_1Úproc_cmdlinerÔ   r*  r+  r   )r  r»   r0  r2   r2   r3   Úcmdline  s   þ€þzProcess.cmdlinec                 C   s6   t  | j¡}|rtst|tƒsJ t|ƒƒ‚tt|ƒƒS r�   )	r   Úproc_environrÔ   r   rˆ   r   rá   r   r‹   )r  Úustrr2   r2   r3   Úenviron"  s   zProcess.environc                 C   s,   zt ƒ | j W S  ty   t| j| jƒ‚w r�   )Úppid_maprÔ   ÚKeyErrorr   r  r  r2   r2   r3   Úppid*  s
   ÿzProcess.ppidc                 C   s®   zt  | j¡W S  tyV } zCt|ƒrQ|  ¡ }|td  |td  |td  |td  |td  |td  |td  |td  |td	  |td
  f
W  Y d }~S ‚ d }~ww )NrH   rJ   rL   rN   rP   rR   rT   rV   rX   rZ   )r   Úproc_memory_inforÔ   r*  r+  rd  rl  )r  r0  Úinfor2   r2   r3   Ú_get_raw_meminfo0  s&   









ö€ïzProcess._get_raw_meminfoc                 C   s(   |   ¡ }|d }|d }t||f| Ž S )Nr4   r?   )r�  rh   )r  Útri   rj   r2   r2   r3   Úmemory_infoF  s   zProcess.memory_infoc                 C   s,   |   ¡ }t | j¡}|tƒ 9 }t||f Ž S r�   )rƒ  r   Úproc_memory_ussrÔ   rŽ   rn   )r  Ú	basic_memro   r2   r2   r3   Úmemory_full_infoP  s   
zProcess.memory_full_infoc              
   c   s|   � zt  | j¡}W n ty } zt|| j| jƒ‚d }~ww |D ]\}}}}t|ƒ}ts0t|ƒ}t	|ƒ}||||fV  q d S r�   )
r   Úproc_memory_mapsrÔ   r*  rI  r  r‡   r   r‹   Úhex)r  Úrawr0  ÚaddrÚpermrq   ri   r2   r2   r3   Úmemory_mapsW  s   €€ýûzProcess.memory_mapsc                 C   s   t  | j¡S r�   )r   Ú	proc_killrÔ   r  r2   r2   r3   Úkillf  r5  zProcess.killc                 C   sT   |t jkrt | j¡ d S |tt dtƒ ƒtt dtƒ ƒfv r&t | j|¡ d S t	dƒ‚)NÚCTRL_C_EVENTÚCTRL_BREAK_EVENTzPonly SIGTERM, CTRL_C_EVENT and CTRL_BREAK_EVENT signals are supported on Windows)
ÚsignalÚSIGTERMr   r�  rÔ   rC  Úobjectr‚   rŽ  rÕ   )r  Úsigr2   r2   r3   Úsend_signalj  s   
ÿÿzProcess.send_signalNc                 C   sØ   |d u rt j}nt|d ƒ}ttdtjƒ}|d ur|ƒ | nd }z	t  | j|¡}W n t jy9   t|| j| jƒ‚ t j	yD   d }Y nw d}	 t
| jƒsO|S |r_|ƒ |kr_t|| j| jd�‚t |¡ t|d dƒ}qH)Niè  Ú	monotonicrU  TrG  r4   rW  )r   ÚINFINITEÚintrC  rZ  Ú	proc_waitrÔ   r	   r  ÚTimeoutAbandonedÚ
pid_existsr[  rœ   )r  ÚtimeoutÚcext_timeoutÚtimerÚstop_atÚ	exit_coder\  r2   r2   r3   Úwaitw  s*   	÷

úzProcess.waitc                 C   s2   | j dv rdS t | j ¡\}}t|ƒd t|ƒ S )N©r   r!   zNT AUTHORITY\SYSTEMr|   )rÔ   r   Úproc_usernamer‹   )r  Údomainr]   r2   r2   r3   r"  ¢  s   
zProcess.usernamec              
   C   sX   zt  | j¡\}}}|W S  ty+ } zt|ƒr&|  ¡ td  W  Y d }~S ‚ d }~ww )Nr:   )r   Ú
proc_timesrÔ   r*  r+  rd  rl  )r  r]   r^   Úcreatedr0  r2   r2   r3   r:   ©  s   €ýzProcess.create_timec                 C   s   |   ¡ td  S )Nr;   )rd  rl  r  r2   r2   r3   r;   µ  s   zProcess.num_threadsc                 C   s<   t  | j¡}g }|D ]\}}}t |||¡}| |¡ q
|S r�   )r   Úproc_threadsrÔ   r   Úpthreadrº   )r  r±   r
  Ú	thread_idÚutimeÚstimeÚntupler2   r2   r3   Úthreads¹  s   zProcess.threadsc              
   C   sv   zt  | j¡\}}}W n' ty2 } zt|ƒs‚ |  ¡ }|td  }|td  }W Y d }~nd }~ww t ||dd¡S )Nr8   r9   rÅ   )	r   r¥  rÔ   r*  r+  rd  rl  r   Ú	pcputimes)r  r]   r^   r¦  r0  r€  r2   r2   r3   r¶   Â  s   €ûzProcess.cpu_timesc                 C   ó   t  | jd¡ d S )NT©r   Úproc_suspend_or_resumerÔ   r  r2   r2   r3   ÚsuspendÏ  r9  zProcess.suspendc                 C   r¯  )NFr°  r  r2   r2   r3   ÚresumeÓ  r9  zProcess.resumec                 C   s4   | j dv rt| j | jƒ‚t | j ¡}ttj |¡ƒS )Nr¢  )	rÔ   r   r  r   Úproc_cwdr‹   r‚   rq   Únormpath)r  rq   r2   r2   r3   Úcwd×  s   
zProcess.cwdc                 C   sd   | j dv rg S tƒ }t | j ¡}|D ]}t|ƒ}t|ƒr-ts"t|ƒ}t 	|d¡}| 
|¡ qt|ƒS )Nr¢  r,   )rÔ   r×   r   Úproc_open_filesr‡   r   r   r‹   r   Ú	popenfilerÙ   rÚ   )r  r»   Úraw_file_namesÚ_filer¬  r2   r2   r3   Ú
open_filesá  s   

€zProcess.open_filesÚinetc                 C   s   t || jd�S )N)rÜ   )rÖ   rÔ   )r  rÛ   r2   r2   r3   Úconnectionsô  ó   zProcess.connectionsc                 C   ó    t  | j¡}td urt|ƒ}|S r�   )r   Úproc_priority_getrÔ   Úenumr.   ©r  Úvaluer2   r2   r3   Únice_getø  ó   zProcess.nice_getc                 C   s   t  | j|¡S r�   )r   Úproc_priority_setrÔ   rÂ  r2   r2   r3   Únice_setÿ  r¾  zProcess.nice_setc                 C   r¿  r�   )r   Úproc_io_priority_getrÔ   rÁ  r5   rm  r2   r2   r3   Ú
ionice_get  rÅ  zProcess.ionice_getc                 C   s:   |rt dƒ‚|ttttfvrtd| ƒ‚t | j|¡ d S )Nz&value argument not accepted on Windowsz%s is not a valid priority)	Ú	TypeErrorr$   r%   r&   r'   rÕ   r   Úproc_io_priority_setrÔ   )r  ÚioclassrÃ  r2   r2   r3   Ú
ionice_set
  s   ÿzProcess.ionice_setc                 C   s”   zt  | j¡}W t|Ž S  tyI } z2t|ƒs‚ |  ¡ }|td  |td  |td  |td  |td  |td  f}W Y d }~t|Ž S d }~ww )Nr=   r>   r@   rB   rD   rF   )r   Úproc_io_countersrÔ   r*  r+  rd  rl  rt   )r  r»   r0  r€  r2   r2   r3   Úio_counters  s"   ô





ú€ôzProcess.io_countersc                 C   s   t  | j¡}|rtjS tjS r�   )r   Úproc_is_suspendedrÔ   r   ÚSTATUS_STOPPEDÚSTATUS_RUNNING)r  Ú	suspendedr2   r2   r3   rä   %  s   zProcess.statusc                 C   s   dd„ }t  | j¡}||ƒS )Nc                    s   ‡ fdd„t dƒD ƒS )Nc                    s   g | ]
}d |> ˆ @ r|‘qS )r   r2   )r«   Úi©r¬   r2   r3   r­   0  rô   zBProcess.cpu_affinity_get.<locals>.from_bitmask.<locals>.<listcomp>é@   r   rÕ  r2   rÕ  r3   Úfrom_bitmask/  s   z.Process.cpu_affinity_get.<locals>.from_bitmask)r   Úproc_cpu_affinity_getrÔ   )r  r×  Úbitmaskr2   r2   r3   Úcpu_affinity_get-  s   zProcess.cpu_affinity_getc                 C   sl   dd„ }t tttƒ ƒƒƒ}|D ]}||vr(t|ttfƒs"td| ƒ‚td| ƒ‚q||ƒ}t	 
| j|¡ d S )Nc                 S   s.   | st d|  ƒ‚d}| D ]}|d| O }q|S )Nzinvalid argument %rr   r4   )rÕ   )ÚlsÚoutÚbr2   r2   r3   Ú
to_bitmask6  s   z,Process.cpu_affinity_set.<locals>.to_bitmaskz&invalid CPU %r; an integer is requiredzinvalid CPU %r)rÚ   r   r�   r¸   rˆ   r˜  r   rÊ  rÕ   r   Úproc_cpu_affinity_setrÔ   )r  rÃ  rÞ  ÚallcpusÚcpurÙ  r2   r2   r3   Úcpu_affinity_set4  s   ÿûzProcess.cpu_affinity_setc              
   C   sN   zt  | j¡W S  ty& } zt|ƒr!|  ¡ td  W  Y d }~S ‚ d }~ww )Nr6   )r   Úproc_num_handlesrÔ   r*  r+  rd  rl  r/  r2   r2   r3   r6   M  s   €ýzProcess.num_handlesc                 C   s   |   ¡ td  }t |d¡S )Nr7   r   )rd  rl  r   Úpctxsw)r  r7   r2   r2   r3   Únum_ctx_switchesV  s   zProcess.num_ctx_switchesr�   )r¼  ),r/   r0   r1   r=  Ú	__slots__r  rg  rj  r   rd  rì   rT  rf  r_  rx  r{  r~  r�  rƒ  r†  rŒ  rŽ  r•  r¡  r"  r:   r;   r­  r¶   r²  r³  r¶  r»  r½  rÄ  rÇ  rÉ  rÍ  rÏ  rä   rÚ  râ  r6   rå  r2   r2   r2   r3   r`  Ð  s�    

	


*
















r`  r2   )r,   )NN)‹r=  r>  r@  rQ  r‚   r‘  ÚsysrZ  Úcollectionsr   Ú r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   Ú_compatr   r   r   r   r   r   r   r   r   r   r   r   r   ÚImportErrorr0  r‰   Úlowerrs  Úgetwindowsversionr)  ÚRuntimeErrorÚversion_inforÁ  Ú__extra__all__r(   rY  Úbuiltin_module_namesrq  r)   ÚIntEnumr-   ÚMIB_TCP_STATE_ESTABÚCONN_ESTABLISHEDÚMIB_TCP_STATE_SYN_SENTÚCONN_SYN_SENTÚMIB_TCP_STATE_SYN_RCVDÚCONN_SYN_RECVÚMIB_TCP_STATE_FIN_WAIT1ÚCONN_FIN_WAIT1ÚMIB_TCP_STATE_FIN_WAIT2ÚCONN_FIN_WAIT2ÚMIB_TCP_STATE_TIME_WAITÚCONN_TIME_WAITÚMIB_TCP_STATE_CLOSEDÚ
CONN_CLOSEÚMIB_TCP_STATE_CLOSE_WAITÚCONN_CLOSE_WAITÚMIB_TCP_STATE_LAST_ACKÚCONN_LAST_ACKÚMIB_TCP_STATE_LISTENÚCONN_LISTENÚMIB_TCP_STATE_CLOSINGÚCONN_CLOSINGÚMIB_TCP_STATE_DELETE_TCBÚPSUTIL_CONN_NONEÚ	CONN_NONErØ   r.   Úglobalsr:  Ú__members__r$   r%   r&   r'   r5   rö   rl  r\   rb   rh   Ú_fieldsrn   rp   r}   rr   rt   r‡   r‹   rŽ   r›   r¢   Údisk_io_countersr§   r¯   r¶   r¸   r½   r¾   r¿   rÆ   rÎ   rÐ   rÖ   rç   rõ   rø   rú   r  r  r  r"   r#   r“  r  Úpidsr›  r|  r+  rI  rT  r_  r`  r2   r2   r2   r3   Ú<module>   sb  €ô



ó

ÿþýüûúùø	÷
öõôóòñðïîíìëê ÿÿÿ


			
 *

