
    gҔ                        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% 	 ddl
mZ& erddl/Z/ndZ/g d$Z0d%Z1d&Z2d'ejf                  v Z4e/d(Z5n! e/jl                  d)d*d(i      Z7e7jj                  Z5e&jp                  ejr                  e&jt                  ejv                  e&jx                  ejz                  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                  e1e&j                  ej                  iZQe/5 G d+ d,e/jl                        ZR eS       j                  eRj                         e/	dZVdZWd-ZXd.ZYn5 G d/ d0e/jl                        ZZ eS       j                  eZj                          e[di d1dd2dd3d-d4d.d5d6d7d8d9d d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWZ\ e	dXg dY      Z] e	dZg d[      Z^ e	d\g d]      Z_ e	d^e_j                  d_z         Za e	d`dadbg      Zb e	dcdddej                  ebj                        z         Zd e	dfg dg      Ze edhi      dj        Zfdk Zgedl        Zhdm Zidn Zje&j                  Zkdo Zldp Zmdq Zndr Zods Zpdt Zqdu Zrdv Zsdwatdx ZuddyZvdz Zwd{ Zxd| Zyd} Zzda{d~ Z|d Z}d Z~d Z G d d      Ze&j                  Ze&j                  Ze&j                  Zd ZddZd Zd Z G d d      Zy# e'$ rVZ( e)e(      jU                         jW                  d      r+ ejX                         d   d k  rd!Z-e-d"z  Z-e-d#z  Z- e.e-       dZ([(ww xY w)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                   $    e Zd ZeZeZeZeZeZeZy)PriorityN)	__name__
__module____qualname__r   r   r   r   r   r        F/var/www/openai/venv/lib/python3.12/site-packages/psutil/_pswindows.pyr.   r.   s   s&    &A#&A#11 5"9r3   r.         c                       e Zd ZdZdZdZdZy)
IOPriorityr   r   r5   r6   N)r/   r0   r1   r#   r$   r%   r&   r2   r3   r4   r8   r8      s    
r3   r8   num_handlesctx_switches	user_timekernel_timecreate_time   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vmsrL   rN   rP   rR   rT   peak_nonpaged_poolnonpaged_poolrZ   r\   privatepfullmem)usspmmap_groupedpathrm   	pmmap_extzaddr perms  pio)
read_countwrite_count
read_byteswrite_bytesother_countother_bytesi   )maxsizec                     dj                  | j                  d      dd       }t        j                  |      }| t	        |      d }t
        j                  j                  ||      S )zConvert paths using native DOS format like:
        "\Device\HarddiskVolume1\Windows\systemew\file.txt"
    into:
        "C:\Windows\systemew\file.txt".
    \Nr6   )joinsplitcextQueryDosDevicelenosru   )srawdrivedriveletter	remainders       r4   convert_dos_pathr      sV     yyr*+H%%h/K#h-/"I77<<Y//r3   c                 j    t         r| S t        | t              r| S | j                  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   s    r4   py2_strencoder      s,     !Sxx-00r3   c                  *    t        j                         S N)r   getpagesizer2   r3   r4   r   r      s    r3   c                      t        j                         } | \  }}}}|}|}|}||z
  }t        ||z
  |d      }	t        |||	||      S )z&System virtual memory as a namedtuple.r   round_)r   virtual_memr   rf   )
memtotphys	availphys_totsys	_availsysrg   availrk   rj   ri   s
             r4   virtual_memoryr      s[    



C-0*GYEED5=DUU]U1=Gwd33r3   c                      t        j                         } | d   }| d   }||z
  }|dkD  r&t        j                         }t        d|z  |z        }nd}d}||z
  }t	        |d      }t        j                  ||||dd      S )z=Swap system memory as a (total, used, free, sin, sout) tuple.r   r5   g{Gz?        r   )r   r   swap_percentintroundr   sswap)r   
total_phystotal_systemrg   percentswaprj   rk   ri   s           r4   swap_memoryr      s    



CQJq6L :%E
 qy'')4+%-.4<DK#G==dGQ::r3   c                     t         r't        | t              r| j                  t        d      } t        j                  |       \  }}||z
  }t        ||d      }t        j                  ||||      S )z'Return disk usage associated with path.strict)errorsr   r   )
r   r   bytesdecoder   r   
disk_usager   r   
sdiskusage)ru   rg   rk   rj   ri   s        r4   r   r     sb    
z$& {{8H{5//$'KE44<DD%2GeT499r3   c                 v    t        j                  |       }|D cg c]  }t        j                  |  c}S c c}w )zReturn disk partitions.)r   disk_partitionsr   	sdiskpart)allrawlistxs      r4   r   r   '  s5    ""3'G+237aGq!7333s   6c                      t        j                         \  } }}t        t        t        j                          D cg c]  }t        |       c} }t        | |||j                  |j                        S c c}w )z)Return system CPU times as a named tuple.)r   	cpu_timesr`   zipper_cpu_timessumrd   re   )ra   rb   rc   npercpu_summeds        r4   r   r   2  sn    )D&$ T5G5G5I0JK0J1A0JKLMfdM33]5F5F   Ls   A3c                      g } t        j                         D ](  \  }}}}}t        |||||      }| j                  |       * | S )z6Return system per-CPU times as a list of named tuples.)r   r   r`   append)retra   rb   rc   rd   re   items          r4   r   r   >  sK    
C.2.@.@.B*fdIsvtY<

4 /C Jr3   c                  *    t        j                         S )z0Return the number of logical CPUs in the system.)r   cpu_count_logicalr2   r3   r4   r   r   G  s    !!##r3   c                  *    t        j                         S )z-Return the number of CPU cores in the system.)r   cpu_count_coresr2   r3   r4   r   r   L  s    !!r3   c                  h    t        j                         \  } }}}d}t        j                  | |||      S )zReturn CPU statistics.r   )r   	cpu_statsr   	scpustats)r:   
interrupts_dpcssyscallssoft_interruptss        r4   r   r   Q  s8    040@-L*eXOj/8 r3   c                      t        j                         \  } }d}t        j                  t	        |       |t	        |            gS )zMReturn CPU frequency.
    On Windows per-cpu frequency is not supported.
    r   )r   cpu_freqr   scpufreqfloat)currmax_min_s      r4   r   r   Z  s8     JD$DU4[$d<==r3   Fc            	          t         st        j                          da t        j                         } t	        | D cg c]  }t        |d       c}      S c c}w )zReturn the number of processes in the system run queue averaged
    over the last 1, 5, and 15 minutes respectively as a tuple.
    Tr5   )_loadavg_inititializedr   init_loadavg_counter
getloadavgtupler   )	raw_loadsloads     r4   r   r   f  sJ     "!!#!% !IY7YT%a.Y7887s   Ac                    | t         vr;t        d| ddj                  t         D cg c]  }t        |       c}            t         |    \  }}t	        j
                  |||      }t               }|D ];  }|\  }}	}
}}}}t        ||	|
|||t        |dk(  r|nd      }|j                  |       = t        |      S c c}w )zReturn socket connections.  If pid == -1 return system-wide
    connections (as opposed to connections opened by one process only).
    zinvalid z kind argument; choose between z, r+   N)pid)r   
ValueErrorr   reprr   net_connectionssetr   TCP_STATUSESaddlist)kind_pidr   familiestypesr   r   r   fdfamtypeladdrraddrstatusr   nts                   r4   r   r   z  s     9TYY;AQ;<>
 	
  oOHe""459G
%C370CueVSrzt	
 	  9%  <s   B<c                  T   i } t        j                         }|j                         D ]~  \  }}t        s+t	        |t
              sJ t        |             t        |      }|\  }}}}t        t        d      rt        j                  |      }t        j                  ||||d      | |<    | 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mtus           r4   r   r     s    
C!G}}edG,8d4j8, &D#( feS7K(&&v.F%%dFE3CD	 ' Jr3   c            	          t        j                         } t        | j                         D cg c]  \  }}t	        |      |f c}}      S c c}}w )zsReturn network I/O statistics for every network interface
    installed on the system as a dict of raw tuples.
    )r   net_io_countersdictr   r   )r   kvs      r4   r   r     sC     


 C399;?;41a-"A&;?@@?s   A
c                      g } t        j                         D ]/  }t        |      }t        |d         |d<   | j	                  |       1 | S )z,Return the addresses associated to each NIC.r   )r   net_if_addrsr   r   r   )r   r   s     r4   r  r    sH    
C""$U q*a

5 % Jr3   c                      t        j                         \  } }}}| dk(  }t        |dz        }t        |dz        }|ry|s|rt        j                  }n|dk(  rt        j
                  }t        j                  |||      S )zReturn battery information.r      rE   Nr+   )r   sensors_batteryboolr   POWER_TIME_UNLIMITEDPOWER_TIME_UNKNOWNsbattery)acline_statusflagsri   secsleftpower_plugged
no_batterychargings          r4   r  r    s}    
 /3.B.B.D+M5'8!Q&Meck"JEAIH//	R--GX}==r3   c                  z    t        t        j                               } t        | t        z
        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_btime)r   s    r4   r  r    s7      
!C
3"
r3   c                      g } t        j                         }|D ]=  }|\  }}}t        |      }t        j                  |d||d      }| j                  |       ? | S )z:Return currently connected users as a list of namedtuples.N)r   usersr   r   suserr   )retlistr   r   ra   hostnametstampr   s          r4   r  r    s[    GjjlG!%hT"]]4x>r	 
 Nr3   c               #      K   t        j                         D ]%  \  } }t        t        |       t        |             ' yw)z*Yields a list of WindowsService instances.N)r   winservice_enumerateWindowsServicer   )r   display_names     r4   r!   r!     s5     "779l]40-2MNN :s   >A c                 N    t        | d      }|j                         d   |_        |S )zBOpen a Windows service and return it as a WindowsService instance.Nr  )r  _query_config_display_name)r   services     r4   r"   r"     s)    T4(G#113NCGNr3   c                       e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
ej                  d	        Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zy)r  z(Represents an installed Windows service.c                      || _         || _        y r   )_namer   )selfr   r  s      r4   __init__zWindowsService.__init__  s    
)r3   c                 p    d| j                   d| j                  d}| j                  j                  |S )Nz(name=z, display_name=))r$  r   	__class__r/   )r%  detailss     r4   __str__zWindowsService.__str__  s0    JJ
 00'::r3   c                 B    d| j                         dt        |       dS )N<z at >)r+  idr%  s    r4   __repr__zWindowsService.__repr__  s    #||~r$x88r3   c                 `    t        |t              st        S | j                  |j                  k(  S r   )r   r  NotImplementedr$  r%  others     r4   __eq__zWindowsService.__eq__  s'     %0!!zzU[[((r3   c                     | |k(   S r   r2   r4  s     r4   __ne__zWindowsService.__ne__  s    5=  r3   c                     | j                         5  t        j                  | j                        \  }}}}d d d        t	        t              t              t              t                    S # 1 sw Y   <xY w)N)r  binpathusername
start_type)_wrap_exceptionsr   winservice_query_configr$  r   r   )r%  r  r:  r;  r<  s        r4   r  zWindowsService._query_config  sj    ""$,,TZZ8 8L'8Z %
 &|4!'*"8,$Z0	
 	
 %$s   %A11A:c                     | j                         5  t        j                  | j                        \  }}d d d        dk(  rd }t	        |      S # 1 sw Y   xY w)Nr   )r   r   )r=  r   winservice_query_statusr$  r   )r%  r   r   s      r4   _query_statuszWindowsService._query_status,  sM    ""$66tzzBKFC %!8C6s++	 %$s   #AAc              #   D  K   	 d y# t         $ r}t        |      r'd| j                  z  }t        d| j                  |      |j                  t
        j                  t
        j                  hv r'd| j                  z  }t        d| j                  |       d}~ww xY 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%  errrD  s      r4   r=  zWindowsService._wrap_exceptions3  s     
	 	 %Hjj!  #t$**#FF''11"  2DJJ>#4::3GG	s%   B 	 B 	BBBBB c                     | j                   S )zThe 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$  r0  s    r4   r   zWindowsService.nameL  s    
 zzr3   c                     | j                   S )z_The service display name. The value is cached when this class
        is instantiated.
        )r   r0  s    r4   r  zWindowsService.display_nameS  s     !!!r3   c                 (    | j                         d   S )zwThe fully qualified path to the service binary/exe file as
        a string, including command line arguments.
        r:  r  r0  s    r4   r:  zWindowsService.binpathY  s     !!#I..r3   c                 (    | j                         d   S )z,The name of the user that owns this service.r;  rN  r0  s    r4   r;  zWindowsService.username_  s    !!#J//r3   c                 (    | j                         d   S )zRA string which can either be "automatic", "manual" or
        "disabled".
        r<  rN  r0  s    r4   r<  zWindowsService.start_typec  s     !!#L11r3   c                 (    | j                         d   S )zzThe process PID, if any, else None. This can be passed
        to Process class to control the service's process.
        r   rA  r0  s    r4   r   zWindowsService.pidk  s     !!#E**r3   c                 (    | j                         d   S )zService status as a string.r   rR  r0  s    r4   r   zWindowsService.statusq  s    !!#H--r3   c                 Z    t        t        j                  | j                                     S )zService long description.)r   r   winservice_query_descrr   r0  s    r4   descriptionzWindowsService.descriptionu  s    T88EFFr3   c                     | j                         }|j                  | j                                | j                         |d<   | j	                         |d<   | j                         |d<   |S )zUUtility method retrieving all the information above as a
        dictionary.
        r   r  rV  )r  updaterA  r   r  rV  )r%  ds     r4   as_dictzWindowsService.as_dict{  sa      	##%&IIK&	 --/.++--r3   N)r/   r0   r1   __doc__r&  r+  r1  r6  r8  r  rA  
contextlibcontextmanagerr=  r   r  r:  r;  r<  r   r   rV  rZ  r2   r3   r4   r  r    sp    2*;9)!
,  0"/02+.G	r3   r  c                     t        | t              sJ |        | j                  t        j                  t        j                  hv ryt        | dd      t        j                  t        j                  hv S )z*Return True if this is a permission error.TrG  r+   )	r   rE  errnoEPERMEACCESgetattrr   ERROR_ACCESS_DENIEDERROR_PRIVILEGE_NOT_HELD)excs    r4   rF  rF    sb    c7#(S(#
yyU[[%,,// 3
B'  %%,  r3   c                     t        | t              sJ |        t        |       rt        ||      S | j                  t        j
                  k(  rt        ||      S | )z3Convert OSError into NoSuchProcess or AccessDenied.r   r   )r   rE  rF  r   r_  ESRCHr	   )re  r   r   s      r4   convert_oserrorri    sN    c7#(S(#$//
yyEKK400
Ir3   c                 B     t        j                          fd       }|S )zDDecorator which converts OSError into NoSuchProcess or AccessDenied.c                     	  | g|i |S # t         $ r'}t        || j                  | j                        d }~ww xY w)Nrg  )rE  ri  r   r$  )r%  argskwargsrJ  funs       r4   wrapperz wrap_exceptions.<locals>.wrapper  sG    	Ft-d-f-- 	F!#488$**EE	Fs    	?":?	functoolswrapsrn  ro  s   ` r4   wrap_exceptionsrt    s)     __SF F Nr3   c                 B     t        j                          fd       }|S )zWorkaround for https://github.com/giampaolo/psutil/issues/875.
    See: https://stackoverflow.com/questions/4457745#4457745.
    c                 R   d}d}t        |      D ]  }	  | g|i |c S  dj                  |      }t        | j                  | j                  |      # t        $ rD}|}|j                  t        k(  r)t	        j
                  |       t        |dz  d      }Y d }~ d }~ww xY w)N-C6?!   r5   {Gz?zH{} retried {} times, converted to AccessDenied as it's stillreturning {}rC  )r   WindowsErrorrG  ERROR_PARTIAL_COPYtimesleepminformatr   r   r$  )	r%  rl  rm  delaytimes_rJ  rD  rn  s	           r4   ro  z)retry_error_partial_copy.<locals>.wrapper  s    uA41$1&11 !6#uc2 	 txxdjjcBB   <<#55JJu%	40Es   A	B&"9B! B!!B&rp  rs  s   ` r4   retry_error_partial_copyr    s)    
 __SC C& Nr3   c                   @   e Zd ZdZg dZd Zd Zd Zed        Z	d Z
eed               Zeed	               Zeed
               Zd Zd Zed        Zed        Zd Zed        Zed        Zed(d       Zed        Zed)d       Zed        Zed        Zed        Zed        Zed        Zeed               Zed        Z ed*d       Z!ed        Z"ed        Z#ed         Z$ed!        Z%ed"        Z&ed#        Z'ed$        Z(ed%        Z)ed&        Z*ed'        Z+y)+Processz1Wrapper class around underlying C implementation.)_cacher$  _ppidr   c                 .    || _         d | _        d | _        y r   )r   r$  r  )r%  r   s     r4   r&  zProcess.__init__  s    

r3   c                 p    | j                   j                  |        | j                  j                  |        y r   )
_proc_infocache_activateexer0  s    r4   oneshot_enterzProcess.oneshot_enter  s&    &&t,%r3   c                 p    | j                   j                  |        | j                  j                  |        y r   )r  cache_deactivater  r0  s    r4   oneshot_exitzProcess.oneshot_exit	  s&    ((.!!$'r3   c                 ~    t        j                  | 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   s     r4   r  zProcess._proc_info  s1    
 nnTXX&3x3y>)))
r3   c                     | j                   dk(  ry| j                   dk(  ryt        j                  j                  | j	                               S )zbReturn process name, which on Windows is always the final
        part of the executable.
        r   zSystem Idle Processr>   System)r   r   ru   basenamer  r0  s    r4   r   zProcess.name  s;     88q=(88q=ww
++r3   c                    t         r!	 t        j                  | j                        }nt        j                  | j                        }t        st        |      }|j                  d      rt        |      S |S # t        $ rC}|j
                  dk(  r.t        d|z         t        | j                  | j                         d }~ww xY w)N   z%r translated into AccessDeniedr   )PYPYr   proc_exer   rz  r_  r   r   r$  r   r   
startswithr   )r%  r  rJ  s      r4   r  zProcess.exe"  s     mmDHH- --)C$C>>$#C((
    99?;cAB&txx<<s   A6 6	C?>B==Cc                    t         j                  t         j                  k\  r#	 t        j                  | j                  d      }n!t        j                  | j                  d      }t        r|S |D cg c]  }t        |       c}S # t
        $ r8}t        |      r"t        j                  | j                  d      }n Y d }~]d }~ww xY wc c}w )NT)use_pebF)	r   WINVERWINDOWS_8_1proc_cmdliner   rE  rF  r   r   )r%  r   rJ  r   s       r4   cmdlinezProcess.cmdline7  s     ;;$***''$? ##DHHd;CJ.12cM!$c22  $S)++DHHeDC  3s   !B 2C	C.CCc                     t        j                  | j                        }|r&t        s t	        |t
              sJ t        |             t        t        |            S r   )	r   proc_environr   r   r   r   r   r   r   )r%  ustrs     r4   environzProcess.environK  sF       *dG,8d4j8,"=#677r3   c                     	 t               | j                     S # t        $ r! t        | j                  | j                        w xY wr   )ppid_mapr   KeyErrorr	   r$  r0  s    r4   ppidzProcess.ppidS  s<    	6:dhh'' 	6$**55	6s	    *Ac                    	 t        j                  | j                        S # t        $ r}t	        |      rt        d       | j                         }|t        d      |t        d      |t        d      |t        d      |t        d      |t        d      |t        d      |t        d	      |t        d
      |t        d      f
cY d }~S  d }~ww xY w)Nz*attempting memory_info() fallback (slower)rL   rN   rP   rR   rT   rV   rX   rZ   r\   r^   )r   proc_memory_infor   rE  rF  r   r  r  )r%  rJ  infos      r4   _get_raw_meminfozProcess._get_raw_meminfoY  s    	((22 	 % BC(#456;/06*+#456<01#89:#345:./?34=12  %	s!   ! 	CBC?CCCc                 P    | j                         }|d   }|d   }t        ||f|z    S )Nr5   rC   )r  rl   )r%  trm   rn   s       r4   memory_infozProcess.memory_infop  s7    
 !!#ddc3Z!^$$r3   c                     | j                         }t        j                  | j                        }|t	               z  }t        ||fz    S r   )r  r   proc_memory_ussr   r   rr   )r%  	basic_memrs   s      r4   memory_full_infozProcess.memory_full_infoz  sB    $$&	""488,{}cV+,,r3   c              #   &  K   	 t        j                  | j                        }|D ]6  \  }}}}t        |      }t        st        |      }t        |      }||||f 8 y # t        $ r&}t        || j                  | j                        d }~ww xY wwr   )
r   proc_memory_mapsr   r   r   r   hexrE  ri  r$  )r%  rawaddrpermru   rm   rJ  s          r4   memory_mapszProcess.memory_maps  s     	.''1C *-%dD#'-(.D4yT4-- *-  	= "#txx<<	=s'   BA <B	B(!B		BBc                 @    t        j                  | j                        S r   )r   	proc_killr   r0  s    r4   killzProcess.kill  s    ~~dhh''r3   c                 ,   |t         j                  k(  r t        j                  | j                         y |t        t         dt                     t        t         dt                     hv r!t        j                  | j                  |       y d}t        |      )NCTRL_C_EVENTCTRL_BREAK_EVENTzPonly SIGTERM, CTRL_C_EVENT and CTRL_BREAK_EVENT signals are supported on Windows)
signalSIGTERMr   r  r   rb  objectr   r  r   )r%  sigrD  s      r4   send_signalzProcess.send_signal  sr    &.. NN488$FNFH5F.9
 
 GGDHHc"+  S/!r3   Nc                 V   |t         j                  }nt        |dz        }t        t        dt        j                        }|
 |       |z   nd }	 t        j
                  | j                  |      }d}	 t        | j                        s|S |r, |       |k\  r"t        || j                  | j                        t	        j                  |       t        |dz  d      }j# t         j                  $ r" t        || j                  | j                        t         j                  $ r d }Y w xY w)Ni  	monotonicrw  rg  r5   ry  )r   INFINITEr   rb  r|  	proc_waitr   r
   r$  TimeoutAbandoned
pid_existsr}  r~  )r%  timeoutcext_timeouttimerstop_at	exit_coder  s          r4   waitzProcess.wait  s   ?==L w~.Lk4995'.':%'G#	 txx>I& dhh'  57g-$W$((LLJJu	4(E ' "" 	@ $((DJJ??$$ 		 I		s    C AD('D(c                     | j                   dv ryt        j                  | j                         \  }}t        |      dz   t        |      z   S )N   r   r>   zNT AUTHORITY\SYSTEMr   )r   r   proc_usernamer   )r%  domainra   s      r4   r;  zProcess.username  sC    88v)))$((3V$t+mD.AAAr3   c                     	 t        j                  | j                        \  }}}|S # t        $ r>}t	        |      r-|r t        d       | j                         t        d      cY d }~S  d }~ww xY w)Nz*attempting create_time() fallback (slower)r=   )r   
proc_timesr   rE  rF  r   r  r  )r%  	fast_only_user_systemcreatedrJ  s         r4   r=   zProcess.create_time  sf    		&*oodhh&?#E7GN 	 %BC(=)ABB	s    $' 	A.2A)"A.(A))A.c                 6    | j                         t        d      S )Nr?   )r  r  r0  s    r4   r?   zProcess.num_threads  s     =!9::r3   c                     t        j                  | j                        }g }|D ].  \  }}}t        j                  |||      }|j                  |       0 |S r   )r   proc_threadsr   r   pthreadr   )r%  r   r  	thread_idutimestimentuples          r4   threadszProcess.threads  sQ    ##DHH-'.#Iue__Yu=FNN6" (/ r3   c                 $   	 t        j                  | j                        \  }}}t        j                  ||dd      S # t        $ rI}t	        |      s t        d       | j                         }|t        d      }|t        d      }Y d }~ed }~ww xY w)Nz(attempting cpu_times() fallback (slower)r;   r<   r   )
r   r  r   rE  rF  r   r  r  r   	pcputimes)r%  ra   rb   _createdrJ  r  s         r4   r   zProcess.cpu_times  s    	4%)__TXX%>"D&(   vsC88  	4$S)<=??$D	+./D)M23F	4s   #= 	B?B

Bc                 D    t        j                  | j                  d       y )NTr   proc_suspend_or_resumer   r0  s    r4   suspendzProcess.suspend  s    ##DHHd3r3   c                 D    t        j                  | j                  d       y )NFr  r0  s    r4   resumezProcess.resume  s    ##DHHe4r3   c                     | j                   dv r t        | j                   | j                        t        j                  | j                         }t        t        j                  j                  |            S )Nr  )	r   r   r$  r   proc_cwdr   r   ru   normpath)r%  ru   s     r4   cwdzProcess.cwd	  sS     88vtxx44 }}TXX&RWW--d344r3   c                 6   | j                   dv rg S t               }t        j                  | j                         }|D ]Q  }t	        |      }t        |      st        st        |      }t        j                  |d      }|j                  |       S t        |      S )Nr  r+   )r   r   r   proc_open_filesr   r   r   r   r   	popenfiler   r   )r%  r   raw_file_names_filer  s        r4   
open_fileszProcess.open_files  s    88vIe
 --dhh7#E$U+EU#)%0E **5"5 $ Cyr3   c                 0    t        || j                        S )N)r   )r   r   )r%  r   s     r4   r   zProcess.net_connections&  s    t$((33r3   c                 f    t        j                  | j                        }t        t	        |      }|S r   )r   proc_priority_getr   enumr.   r%  values     r4   nice_getzProcess.nice_get*  s*    &&txx0UOEr3   c                 B    t        j                  | j                  |      S r   )r   proc_priority_setr   r  s     r4   nice_setzProcess.nice_set1  s    %%dhh66r3   c                 f    t        j                  | j                        }t        t	        |      }|S r   )r   proc_io_priority_getr   r  r8   r  s     r4   
ionice_getzProcess.ionice_get5  s*    ''1S/C
r3   c                     |rd}t        |      |t        t        t        t        hvrt        d|z        t        j                  | j                  |       y )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  rD  s       r4   
ionice_setzProcess.ionice_set<  sT    :CC. 	
 
 9GCDD!!$((G4r3   c           	      b   	 t        j                  | j                        }t        | S # t        $ r|}t	        |      s t        d       | j                         }|t        d      |t        d      |t        d      |t        d      |t        d      |t        d      f}Y d }~t        | S d }~ww xY w)Nz*attempting io_counters() fallback (slower)rA   rB   rD   rF   rH   rJ   )	r   proc_io_countersr   rE  rF  r   r  r  rx   )r%  r   rJ  r  s       r4   io_counterszProcess.io_countersJ  s    	''1C Cy  	$S)>???$DY{+,Y{+,Y{+,Y{+,Y012Y012C Cy	s   ) 	B.A+B))B.c                     t        j                  | j                        }|rt        j                  S t        j
                  S r   )r   proc_is_suspendedr   r   STATUS_STOPPEDSTATUS_RUNNING)r%  	suspendeds     r4   r   zProcess.status]  s1    **4884	))))))r3   c                 V    d }t        j                  | j                        } ||      S )Nc                 P    t        d      D cg c]  }d|z  | z  s| c}S c c}w )N@   r   r   )r   is     r4   from_bitmaskz.Process.cpu_affinity_get.<locals>.from_bitmaskg  s(    $Ry9y!Q!VqLAy999s   ##)r   proc_cpu_affinity_getr   )r%  r  bitmasks      r4   cpu_affinity_getzProcess.cpu_affinity_gete  s(    	: ,,TXX6G$$r3   c                    d }t        t        t        t                                 }|D ]8  }||vst	        |t
        t        f      st        d|z        t        d|z          ||      }t        j                  | j                  |       y )Nc                 H    | st        d| z        d}| D ]
  }|d|z  z  } |S )Nzinvalid argument %rr   r5   )r   )lsoutbs      r4   
to_bitmaskz,Process.cpu_affinity_set.<locals>.to_bitmasko  s7     !6!;<<Cq!t Jr3   z&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  s         r4   cpu_affinity_setzProcess.cpu_affinity_setm  s    	 uS123C'!!#T{3#@3F  %%5%;<<  U#""488W5r3   c                     	 t        j                  | j                        S # t        $ r;}t	        |      r*t        d       | j                         t        d      cY d }~S  d }~ww xY w)Nz*attempting num_handles() fallback (slower)r9   )r   proc_num_handlesr   rE  rF  r   r  r  )r%  rJ  s     r4   r9   zProcess.num_handles  sW    	((22 	 %BC(=)ABB		s    ! 	A%/A A%A  A%c                 b    | j                         t        d      }t        j                  |d      S )Nr:   r   )r  r  r   pctxsw)r%  r:   s     r4   num_ctx_switcheszProcess.num_ctx_switches  s)    (>)BC~~lA..r3   r   )F)inet),r/   r0   r1   r[  	__slots__r&  r  r  r   r  r   rt  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  r   r  r%  r9   r*  r2   r3   r4   r  r    s   ;3I&(  
,   & 3  3$ 8  86. % % - -. ( ( " "  () ()T B B   ; ;   9 9 4 4 5 5 5  5  $ 4 4   7 7   5 5  $ * * % % 6 62   / /r3   r  r2   )r+   )NN)r[  r\  r_  rq  r   r  sysr|  collectionsr   r   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   ImportErrorrJ  r   lowerr  getwindowsversionrD  RuntimeErrorr  __extra__all__r'   r{  builtin_module_namesr  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.   globalsrX  __members__r#   r$   r%   r&   r8   r   r  r`   rf   rl   _fieldsrr   rt   r   rv   rx   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  pidsr  r  rF  ri  rt  r  r  r2   r3   r4   <module>rU     s  
 '    	  
  "   " ! " #  #  "  + ( "      8 8 0 0 2 4)" D

$  S---<G DLL9b/BM##G 	g66!6!6!6!6  '"8"8  '"8"8  '"8"8w11!!7#:#:!6!6w22 4 4!!?7,,  :4<< : IX))*<NJMKT\\  IZ++,   	
           
  !" #$ %& '( )* +, -	B {EG	 	7MN
 56 j$,,":;?VUO<-*?*?!@@B	  7 8 3	0 	0	1 	 		4;> (( 	:4	$
"
>  9(8A>2 	"O@ @^ yy__
==
8\/ \/Y  C##$56!C!!#A&* DKK))3s   <O> >QAQQ