U xe_@s(dZddlZddlZddlZddlZddlZddlZddlZddlm Z ddl m Z ddl m Z ddl m Z ddl mZdd l mZdd l mZdd l mZdd l mZdd l mZddl mZddl mZddl mZddl mZddl mZddlmZddlmZddlmZddlmZddlmZddlm Z ddlm!Z!ddlm"Z"ddlm#Z#ddlm$Z$ddlm%Z%zddl mZ&Wnje'k rZ(zJe)e(*+dre,dd krd!Z-e-d"7Z-e-d#7Z-e.e-nW5dZ([(XYnXej/d$krddl0Z0ndZ0d%d&d'd(d)d*d+d,d-d.d/d0d1d2gZ1d3Z2d4Z3d5ej4kZ5e0dkrLd6Z6ne07d7d2d6iZ8e8j6Z6e&j9e j:e&j;e je&j?e j@e&jAe jBe&jCe jDe&jEe jFe&jGe jHe&jIe jJe&jKe jLe&jMe jNe&jOe2e&jPe jQi ZRe0dk rGd8d9d9e0j7ZSeTUeSjVe0dkrdZWdZXd:ZYd;ZZn Gdd?d d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOZ]e dPdQdRdSdTdUgZ^e dVdWdXdYdZd[gZ_e d\d]d^d_d`dadbdcdddedfdgdhg Z`e die`jadjZbe dkdld]gZce dmdndodecjaZee dpdqdrdsdtdudvgZfedwdxdydzZgd{d|Zhed}d~ZiddZjddZke&jlZlddZmddZnddZoddZpddZqddZrddZsddZtdauddZvdddZwddZxddZyddZzddZ{da|ddZ}ddZ~dd%Zdd&ZGdddeZe&jZe&jZe&jZddZdddZddZddZGdddeZdS)z Windows platform implementation.N) namedtuple)_common) AccessDenied) conn_tmap)conn_to_ntuple)debug)ENCODING) ENCODING_ERRS) isfile_strict)memoize)memoize_when_activated) NoSuchProcess)parse_environ_block)TimeoutExpired) usage_percent)long) lru_cache)PY3range)unicode)ABOVE_NORMAL_PRIORITY_CLASS)BELOW_NORMAL_PRIORITY_CLASS)HIGH_PRIORITY_CLASS)IDLE_PRIORITY_CLASS)NORMAL_PRIORITY_CLASS)REALTIME_PRIORITY_CLASS)_psutil_windowszdll load failedz3this Windows version is too old (< Windows Vista); z:psutil 3.4.2 is the latest version which supports Windows z2000, XP and 2003 server)win_service_iterwin_service_getrrrrrrIOPRIO_VERYLOW IOPRIO_LOW IOPRIO_NORMAL IOPRIO_HIGHCONN_DELETE_TCBAF_LINKZ DELETE_TCBi+Z__pypy__ AddressFamilyc@s$eZdZeZeZeZeZeZeZdS)PriorityN) __name__ __module__ __qualname__rrrrrrr0r0D/opt/alt/python38/lib64/python3.8/site-packages/psutil/_pswindows.pyr,ms r,r c@seZdZdZdZdZdZdS) IOPriorityrrr2r N)r-r.r/r$r%r&r'r0r0r0r1r3}sr3r! ) num_handles ctx_switches user_time kernel_time create_time num_threads io_rcount io_wcount io_rbytes io_wbytesio_count_othersio_bytes_othersnum_page_faults peak_wsetwsetpeak_paged_pool paged_poolpeak_non_paged_poolnon_paged_poolpagefile peak_pagefile mem_private scputimesusersystemidle interruptdpcsvmemtotalZ availablepercentusedfreepmemrssvmsrPrQrRrSrTZpeak_nonpaged_poolZ nonpaged_poolrWrXZprivatepfullmem)uss pmmap_groupedpath pmmap_extz addr perms  pioZ read_countZ write_countZ read_bytesZ write_bytes other_countZ other_bytesi)maxsizecCs@d|ddd}t|}|t|d}tj||S)zConvert paths using native DOS format like: "\Device\HarddiskVolume1\Windows\systemew\file.txt" into: "C:\Windows\systemew\file.txt" \Nr )joinsplitcextZwin32_QueryDosDevicelenosrk)sZrawdriveZ driveletterZ remainderr0r0r1convert_dos_paths rxcCs&tr|St|tr|S|ttSdS)zmEncode a unicode string to a byte string by using the default fs encoding + "replace" error handler. N)r isinstancestrencoder r )rwr0r0r1 py2_strencodes  r|cCstSN)rt getpagesizer0r0r0r1r~sr~c CsNt}|\}}}}}}|}|}|} ||} t|||dd} t||| | | S)z&System virtual memory as a namedtuple.rZround_)rt virtual_memrr`) memZtotphysZ availphysZtotpagefZ availpagefZtotvirtZfreevirtraZavailrdrcrbr0r0r1virtual_memorysrcCsBt}|d}|d}||}t||dd}t||||ddS)z=Swap system memory as a (total, used, free, sin, sout) tuple.r2r rrr)rtrrrZsswap)rrardrcrbr0r0r1 swap_memorys rcCsPtrt|tr|jtdd}t|\}}||}t||dd}t ||||S)z'Return disk usage associated with path.strict)errorsrr) rrybytesdecoder rt disk_usagerrZ sdiskusage)rkrardrcrbr0r0r1rs rcCst|}dd|DS)zReturn disk partitions.cSsg|]}tj|qSr0)rZ sdiskpart.0xr0r0r1 sz#disk_partitions..)rtdisk_partitions)allrawlistr0r0r1rs rcCs<t\}}}tddttD}t||||j|jS)z)Return system CPU times as a named tuple.cSsg|] }t|qSr0)sum)rnr0r0r1r szcpu_times..)rt cpu_timesrZzip per_cpu_timesr^r_)r[r\r]Z percpu_summedr0r0r1rs rcCs:g}tD](\}}}}}t|||||}||q |S)z6Return system per-CPU times as a list of named tuples.)rtrrZappend)retr[r\r]r^r_itemr0r0r1r%s  rcCstS)z0Return the number of logical CPUs in the system.)rtcpu_count_logicalr0r0r0r1r.srcCstS)z6Return the number of physical CPU cores in the system.)rtZcpu_count_physr0r0r0r1cpu_count_physical3srcCs$t\}}}}d}t||||S)zReturn CPU statistics.r)rt cpu_statsrZ scpustats)rEZ interruptsZdpcsZsyscallsZsoft_interruptsr0r0r1r8s  rcCs(t\}}d}tt||t|gS)zMReturn CPU frequency. On Windows per-cpu frequency is not supported. )rtcpu_freqrZscpufreqfloat)ZcurrZmax_Zmin_r0r0r1r@s rFcCs*tstdat}tdd|DS)z~Return the number of processes in the system run queue averaged over the last 1, 5, and 15 minutes respectively as a tupleTcSsg|]}t|dqS)r2)round)rloadr0r0r1rWszgetloadavg..)_loadavg_inititializedrtZinit_loadavg_counter getloadavgtuple)Z raw_loadsr0r0r1rLs rc Cs|tkr(td|dddtDft|\}}t|||}t}|D]D}|\}}} } } } } t||| | | | t|dkr~| ndd}||qLt |S)zReturn 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, cSsg|] }t|qSr0)reprrr0r0r1resz#net_connections..r*N)pid) r ValueErrorrrrtnet_connectionssetr TCP_STATUSESaddlist)kind_pidZfamiliestypesrrrfdZfamtypeZladdrZraddrstatusrntr0r0r1r_s  rcCsxi}t}|D]^\}}ts>t|ts6tt|t|}|\}}}}t t dr^t |}t ||||||<q|S)z)Get NIC stats (isup, duplex, speed, mtu). NicDuplex) rt net_if_statsitemsrryrAssertionErrorrr|hasattrrrZ snicstats)rZrawdictnamerZisupZduplexZspeedZmtur0r0r1rqs   rcCst}tdd|DS)zsReturn network I/O statistics for every network interface installed on the system as a dict of raw tuples. cSsg|]\}}t||fqSr0r|)rkvr0r0r1rsz#net_io_counters..)rtnet_io_countersdictrrr0r0r1rsrcCs8g}tD]&}t|}t|d|d<||q |S)z,Return the addresses associated to each NIC.r)rt net_if_addrsrr|r)rrr0r0r1rs   rcCsdt\}}}}|dk}t|d@}t|d@}|r8dS|s@|rHtj}n|dkrVtj}t|||S)zReturn battery information.rr6Nr*)rtsensors_batteryboolrZPOWER_TIME_UNLIMITEDZPOWER_TIME_UNKNOWNZsbattery)Z acline_statusflagsrbZsecsleftZ power_pluggedZ no_batteryZchargingr0r0r1rs  rcCs,tt}t|tdkr tS|a|SdS)z:The system boot time expressed in seconds since the epoch.rN)rrt boot_timeabs _last_btimerr0r0r1rs  rcCsHg}t}|D]2}|\}}}t|}t|d||d}||q|S)z:Return currently connected users as a list of namedtuples.N)rtusersr|rZsuserr)retlistrrr[ZhostnameZtstamprr0r0r1rs  rccs*tD]\}}tt|t|VqdS)z*Yields a list of WindowsService instances.N)rtZwinservice_enumerateWindowsServicer|)r display_namer0r0r1r"scCst|d}|d|_|S)zBOpen a Windows service and return it as a WindowsService instance.Nr)r _query_config _display_name)rZservicer0r0r1r#s c@seZdZdZddZddZddZdd Zd d Zd d Z ddZ e j ddZ ddZddZddZddZddZddZddZd d!Zd"d#Zd$S)%rz(Represents an installed Windows service.cCs||_||_dSr})_namer)selfrrr0r0r1__init__szWindowsService.__init__cCs d|j|jf}d|jj|fS)Nz(name=%r, display_name=%r)z%s%s)rr __class__r-)rZdetailsr0r0r1__str__s zWindowsService.__str__cCsd|t|fS)Nz <%s at %s>)ridrr0r0r1__repr__szWindowsService.__repr__cCst|tstS|j|jkSr})ryrNotImplementedrrotherr0r0r1__eq__s zWindowsService.__eq__cCs ||k Sr}r0rr0r0r1__ne__szWindowsService.__ne__c CsH|t|j\}}}}W5QRXtt|t|t|t|dS)N)rbinpathusername start_type)_wrap_exceptionsrtZwinservice_query_configrrr|)rrrrrr0r0r1rs  zWindowsService._query_configc Cs<|t|j\}}W5QRX|dkr0d}t||dS)Nr)rr)rrtZwinservice_query_statusrr)rrrr0r0r1 _query_statuss  zWindowsService._query_statusc cs~z dVWnntk rx}zPt|r|}||||d<||d<||d<|S)zUUtility method retrieving all the information above as a dictionary. rrr)rupdaterrrr)rdr0r0r1as_dictPs    zWindowsService.as_dictN)r-r.r/__doc__rrrrrrr contextlibcontextmanagerrrrrrrrrrrr0r0r0r1rs&  rcCs<t|tst||jtjtjfkp:t|ddtjtj fkS)z*Return True if this is a permission error.rr*) ryrrerrnoZEPERMZEACCESgetattrrtZERROR_ACCESS_DENIEDZERROR_PRIVILEGE_NOT_HELD)excr0r0r1rs rcCsFt|tst|t|r&t||dS|jtjkr>t||dS|dS)z3Convert OSError into NoSuchProcess or AccessDenied.rrN)ryrrrrrZESRCHr)rrrr0r0r1convert_oserrors    rcstfdd}|S)zDDecorator which converts OSError into NoSuchProcess or AccessDenied.c sLz|f||WStk rF}zt||j|jdW5d}~XYnXdS)Nr)rrrr)rargskwargsrfunr0r1wrappersz wrap_exceptions..wrapper functoolswrapsrrr0rr1wrap_exceptionssrcstfdd}|S)zWorkaround for https://github.com/giampaolo/psutil/issues/875. See: https://stackoverflow.com/questions/4457745#4457745 c sd}d}t|D]p}z|f||WStk r~}z6|}|jtkrlt|t|dd}WY qnW5d}~XYqXqd||f}t|j|j |ddS)N-C6?!r2{Gz?zI%s retried %s times, converted to AccessDenied as it's still returning %rr) r WindowsErrorrERROR_PARTIAL_COPYtimesleepminrrr) rrrdelaytimesr_rrrr0r1rs     z)retry_error_partial_copy..wrapperrrr0rr1retry_error_partial_copysrc@seZdZdZddddgZddZdd Zd d Zed d Z ddZ e eddZ e e ddZe e ddZddZddZe ddZe ddZddZe d d!Ze d"d#Ze dPd%d&Ze d'd(Ze d)d*Ze d+d,Ze d-d.Ze d/d0Ze d1d2Ze d3d4Ze e d5d6Ze d7d8Z e dQd:d;Z!e dd?Z#e d@dAZ$e dBdCZ%e dDdEZ&e dFdGZ'e dHdIZ(e dJdKZ)e dLdMZ*e dNdOZ+d$S)RProcessz1Wrapper class around underlying C implementation.rr_ppid_cachecCs||_d|_d|_dSr})rrr )rrr0r0r1rszProcess.__init__cCs|j||j|dSr}) _proc_infoZcache_activateexerr0r0r1 oneshot_enters zProcess.oneshot_entercCs|j||j|dSr})r Zcache_deactivater rr0r0r1 oneshot_exits zProcess.oneshot_exitcCs$t|j}t|ttks t|S)zOReturn multiple information about this process as a raw tuple. )rtZ proc_inforru pinfo_maprrrr0r0r1r s zProcess._proc_infocCs,|jdkrdS|jdkrdStj|S)zbReturn process name, which on Windows is always the final part of the executable. rzSystem Idle Processr!ZSystem)rrvrkbasenamer rr0r0r1rs   z Process.namec Cstr`zt|j}Wqltk r\}z*|jdkrJtd|t|j|jW5d}~XYqlXn t|j}t sxt |}| drt |S|S)Nz%r forced into AccessDeniedrq) PYPYrtZproc_exerrrrrrrr| startswithrx)rr rr0r0r1r s    z Process.exec Cstjtjkrbztj|jdd}Wqrtk r^}z t|rLtj|jdd}nW5d}~XYqrXntj|jdd}trz|Sdd|DSdS)NT)Zuse_pebFcSsg|] }t|qSr0r)rrwr0r0r1rsz#Process.cmdline..)rtZWINVERZ WINDOWS_8_1Z proc_cmdlinerrrr)rrrr0r0r1cmdlines zProcess.cmdlinecCs6t|j}|r*ts*t|ts*tt|tt |Sr}) rtZ proc_environrrryrrrrr|)rZustrr0r0r1environs zProcess.environcCs6zt|jWStk r0t|j|jYnXdSr})ppid_maprKeyErrorrrrr0r0r1ppid!sz Process.ppidcCszt|jWStk r}zt|r|}|td|td|td|td|td|td|td|td|td |td f WYSW5d}~XYnXdS) NrPrQrRrSrTrUrVrWrXrY)rtZproc_memory_inforrrr r)rrinfor0r0r1_get_raw_meminfo's"          zProcess._get_raw_meminfocCs(|}|d}|d}t||f|S)Nr2r5)rre)rtrfrgr0r0r1 memory_info=szProcess.memory_infocCs,|}t|j}|t9}t||fSr})rrtZproc_memory_ussrr~rh)rZ basic_memrir0r0r1memory_full_infoGs  zProcess.memory_full_infoc cszt|j}Wn2tk rB}zt||j|jW5d}~XYn>X|D]6\}}}}t|}tsht|}t |}||||fVqHdSr}) rtZproc_memory_mapsrrrrrxrr|hex)rrawrZaddrZpermrkrfr0r0r1 memory_mapsNs"zProcess.memory_mapscCs t|jSr})rt proc_killrrr0r0r1kill]sz Process.killcCsT|tjkrt|jn8|ttdtttdtfkrHt|j|nt ddS)NZ CTRL_C_EVENTZCTRL_BREAK_EVENTzPonly SIGTERM, CTRL_C_EVENT and CTRL_BREAK_EVENT signals are supported on Windows) signalSIGTERMrtr#rrobjectrvr$r)rZsigr0r0r1 send_signalas  zProcess.send_signalNcCs|dkrtj}n t|d}ttdtj}|dk r<||nd}zt|j|}Wn>tjk rxt||j|jYntj k rd}YnXd}t |js|S|r||krt||j|jdt |t |dd}qdS)Ni monotonicrrr2r) rtZINFINITEintrrZ proc_waitrrrZTimeoutAbandoned pid_existsrr)rZtimeoutZ cext_timeoutZtimerZstop_atZ exit_coderr0r0r1waitns$    z Process.waitcCs2|jdkrdSt|j\}}t|dt|S)Nrr!zNT AUTHORITY\SYSTEMrq)rrtZ proc_usernamer|)rZdomainr[r0r0r1rs zProcess.usernamec Csbzt|j\}}}|WStk r\}z&t|rJ|tdWYSW5d}~XYnXdS)NrH)rt proc_timesrrrr r)rr[r\createdrr0r0r1rHszProcess.create_timecCs|tdS)NrI)r rrr0r0r1rIszProcess.num_threadscCs<t|j}g}|D]"\}}}t|||}||q|Sr})rtZ proc_threadsrrZpthreadr)rrrZ thread_idutimeZstimentupler0r0r1threadss   zProcess.threadsc Cstzt|j\}}}WnLtk rb}z.t|s2|}|td}|td}W5d}~XYnXt||ddS)NrFrGr) rtr.rrrr rrZ pcputimes)rr[r\r/rrr0r0r1rs zProcess.cpu_timescCst|jddS)NTrtZproc_suspend_or_resumerrr0r0r1suspendszProcess.suspendcCst|jddS)NFr3rr0r0r1resumeszProcess.resumecCs4|jdkrt|j|jt|j}ttj|S)Nr-) rrrrtZproc_cwdr|rvrknormpath)rrkr0r0r1cwds  z Process.cwdcCsd|jdkrgSt}t|j}|D]6}t|}t|r$tsDt|}t |d}| |q$t |S)Nr-r*) rrrtZproc_open_filesrxr rr|rZ popenfilerr)rrZraw_file_namesZ_filer1r0r0r1 open_filess    zProcess.open_filesinetcCst||jdS)N)r)rr)rrr0r0r1 connectionsszProcess.connectionscCs t|j}tdk rt|}|Sr})rtZproc_priority_getrenumr,rvaluer0r0r1nice_gets zProcess.nice_getcCst|j|Sr})rtZproc_priority_setrr<r0r0r1nice_setszProcess.nice_setcCs t|j}tdk rt|}|Sr})rtZproc_io_priority_getrr;r3rr0r0r1 ionice_gets zProcess.ionice_getcCs:|r td|ttttfkr(td|t|j|dS)Nz&value argument not accepted on Windowsz%s is not a valid priority) TypeErrorr$r%r&r'rrtZproc_io_priority_setr)rZioclassr=r0r0r1 ionice_sets zProcess.ionice_setc Cszt|j}Wnttk r}zVt|s,|}|td|td|td|td|td|tdf}W5d}~XYnXt|S)NrJrKrLrMrNrO)rtZproc_io_countersrrrr rrn)rrrrr0r0r1 io_counters s      zProcess.io_counterscCs t|j}|rtjStjSdSr})rtZproc_is_suspendedrrZSTATUS_STOPPEDZSTATUS_RUNNING)rZ suspendedr0r0r1rs zProcess.statuscCsdd}t|j}||S)NcsfddtdDS)Ncsg|]}d|>@r|qS)rr0)rirr0r1r's zBProcess.cpu_affinity_get..from_bitmask..@rrEr0rEr1 from_bitmask&sz.Process.cpu_affinity_get..from_bitmask)rtZproc_cpu_affinity_getr)rrGbitmaskr0r0r1cpu_affinity_get$s zProcess.cpu_affinity_getcCsndd}tttt}|D]4}||krt|ttfsFtd|qtd|q||}t |j |dS)NcSs.|std|d}|D]}|d|O}q|S)Nzinvalid argument %rrr2)r)Zlsoutbr0r0r1 to_bitmask-s  z,Process.cpu_affinity_set..to_bitmaskz&invalid CPU %r; an integer is requiredzinvalid CPU %r) rrrurryr*rrArrtZproc_cpu_affinity_setr)rr=rLZallcpusZcpurHr0r0r1cpu_affinity_set+s zProcess.cpu_affinity_setc CsXzt|jWStk rR}z&t|r@|tdWYSW5d}~XYnXdS)NrD)rtZproc_num_handlesrrrr rrr0r0r1rDDs zProcess.num_handlescCs|td}t|dS)NrEr)r rrZpctxsw)rrEr0r0r1num_ctx_switchesMszProcess.num_ctx_switches)N)r9),r-r.r/r __slots__rrrr r rrr rrrrrrrr"r$r(r,rrHrIr2rr4r5r7r8r:r>r?r@rBrCrrIrMrDrNr0r0r0r1r s           *                   r )r*)NN)rrrrrvr%sysr collectionsrrrrrrr r r r r rrrrZ_compatrrrrrrrrrrrrrt ImportErrorrrzlowerrZgetwindowsversionr RuntimeError version_infor;Z__extra__all__r(rbuiltin_module_namesrr)IntEnumr+ZMIB_TCP_STATE_ESTABZCONN_ESTABLISHEDZMIB_TCP_STATE_SYN_SENTZ CONN_SYN_SENTZMIB_TCP_STATE_SYN_RCVDZ CONN_SYN_RECVZMIB_TCP_STATE_FIN_WAIT1ZCONN_FIN_WAIT1ZMIB_TCP_STATE_FIN_WAIT2ZCONN_FIN_WAIT2ZMIB_TCP_STATE_TIME_WAITZCONN_TIME_WAITZMIB_TCP_STATE_CLOSEDZ CONN_CLOSEZMIB_TCP_STATE_CLOSE_WAITZCONN_CLOSE_WAITZMIB_TCP_STATE_LAST_ACKZ CONN_LAST_ACKZMIB_TCP_STATE_LISTENZ CONN_LISTENZMIB_TCP_STATE_CLOSINGZ CONN_CLOSINGZMIB_TCP_STATE_DELETE_TCBZPSUTIL_CONN_NONEZ CONN_NONErr,globalsr __members__r$r%r&r'r3rrrZr`re_fieldsrhrjrrrlrnrxr|r~rrZdisk_io_countersrrrrrrrrrrrrrrrrrrr"r#r'rZpidsr+rrrrrr r0r0r0r1s                                              *