U gҔ@sdZddlZddlZddlZddlZddlZddlZddlZddlm 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([(XYnXerddl/Z/ndZ/d$d%d&d'd(d)d*d+d,d-d.d/d0d1gZ0d2Z1d3Z2d4ej3kZ4e/dkrFd5Z5ne/6d6d1d5iZ7e7j5Z5e&j8e j9e&j:e j;e&je j?e&j@e jAe&jBe jCe&jDe jEe&jFe jGe&jHe jIe&jJe jKe&jLe jMe&jNe1e&jOe jPi ZQe/dk rGd7d8d8e/j6ZReSTeRjUe/dkr dZVdZWd9ZXd:ZYn Gd;d<dd d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNZ\e dOdPdQdRdSdTgZ]e dUdVdWdXdYdZgZ^e d[d\d]d^d_d`dadbdcdddedfdgg Z_e dhe_j`diZae djdkd\gZbe dldmdncebj`Zde dodpdqdrdsdtdugZeedvdwdxdyZfdzd{Zged|d}Zhd~dZiddZje&jkZkddZlddZmddZnddZoddZpddZqddZrddZsdatddZudddZvddZwddZxddZyddZzda{ddZ|ddZ}dd$Z~dd%ZGdddZe&jZe&jZe&jZddZdddZddZddZGdddZdS)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_cacherange)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 serverwin_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__rrrrrrr.r.A/opt/hc_python/lib64/python3.8/site-packages/psutil/_pswindows.pyr*ss r*c@seZdZdZdZdZdZdS) IOPriorityrrr0r1N)r+r,r-r"r#r$r%r.r.r.r/r2sr2 ) 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 interruptdpcsvmemtotal availablepercentusedfreepmemrssvmsrPrQrRrSrTZpeak_nonpaged_poolZ nonpaged_poolrWrXprivatepfullmem)uss pmmap_groupedpath pmmap_extz addr perms  pioZ read_countZ write_count read_bytes 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". \Nr1)joinsplitcextZQueryDosDevicelenosrm)sZrawdriveZ driveletter remainderr.r.r/convert_dos_paths r}cCs&tr|St|tr|S|ttSdS)zmEncode a unicode string to a byte string by using the default fs encoding + "replace" error handler. N)r isinstancestrencoderr)r{r.r.r/ py2_strencodes  rcCstSN)rx getpagesizer.r.r.r/rsrc CsJt}|\}}}}|}|}|}||}t|||dd} t||| ||S)z&System virtual memory as a namedtuple.rZround_)rx virtual_memrr`) memZtotphysZ availphysZ_totsysZ _availsysraZavailrerdrcr.r.r/virtual_memorys rcCspt}|d}|d}||}|dkrBt}td||}nd}d}||}t|d}t||||ddS)z=Swap system memory as a (total, used, free, sin, sout) tuple.rr0g{Gz?r)rxrZ swap_percentintroundrZsswap)rZ total_physZ total_systemraZ percentswaprdrercr.r.r/ swap_memorys rcCsPtrt|tr|jtdd}t|\}}||}t||dd}t ||||S)z'Return disk usage associated with path.strict)errorsrr) rr~bytesdecoderrx disk_usagerrZ sdiskusage)rmrarerdrcr.r.r/rs rcCst|}dd|DS)zReturn disk partitions.cSsg|]}tj|qSr.)rZ sdiskpart.0xr.r.r/ *sz#disk_partitions..)rxdisk_partitions)allrawlistr.r.r/r's rcCs<t\}}}tddttD}t||||j|jS)z)Return system CPU times as a named tuple.cSsg|] }t|qSr.)sum)rnr.r.r/r8szcpu_times..)rx cpu_timesrZzip per_cpu_timesr^r_)r[r\r]Z percpu_summedr.r.r/r2srcCs:g}tD](\}}}}}t|||||}||q |S)z6Return system per-CPU times as a list of named tuples.)rxrrZappend)retr[r\r]r^r_itemr.r.r/r>s  rcCstS)z0Return the number of logical CPUs in the system.)rxcpu_count_logicalr.r.r.r/rGsrcCstS)z-Return the number of CPU cores in the system.)rxcpu_count_coresr.r.r.r/rLsrcCs$t\}}}}d}t||||S)zReturn CPU statistics.r)rx cpu_statsrZ scpustats)rEZ interruptsZ_dpcsZsyscallsZsoft_interruptsr.r.r/rQsrcCs(t\}}d}tt||t|gS)zMReturn CPU frequency. On Windows per-cpu frequency is not supported. r)rxcpu_freqrZscpufreqfloat)currZmax_Zmin_r.r.r/rZs rFcCs*tstdat}tdd|DS)zReturn the number of processes in the system run queue averaged over the last 1, 5, and 15 minutes respectively as a tuple. TcSsg|]}t|dqS)r0)r)rloadr.r.r/rrszgetloadavg..)_loadavg_inititializedrxZinit_loadavg_counter getloadavgtuple)Z raw_loadsr.r.r/rfs 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|qSr.)reprrr.r.r/rsz#net_connections..r(N)pid) r ValueErrorrvrxnet_connectionssetr TCP_STATUSESaddlist)kind_pidZfamiliestypesrrrfdZfamtypeladdrraddrstatusrntr.r.r/rzs.  rcCszi}t}|D]`\}}ts>t|ts6tt|t|}|\}}}}t t dr^t |}t ||||d||<q|S)z)Get NIC stats (isup, duplex, speed, mtu). NicDuplex) rx net_if_statsitemsrr~rAssertionErrorrrhasattrrrZ snicstats)rZrawdictnamerZisupZduplexspeedZmtur.r.r/rs   rcCst}tdd|DS)zsReturn network I/O statistics for every network interface installed on the system as a dict of raw tuples. cSsg|]\}}t||fqSr.r)rkvr.r.r/rsz#net_io_counters..)rxnet_io_countersdictrrr.r.r/rsrcCs8g}tD]&}t|}t|d|d<||q |S)z,Return the addresses associated to each NIC.r)rx net_if_addrsrrr)rrr.r.r/rs   rcCsdt\}}}}|dk}t|d@}t|d@}|r8dS|s@|rHtj}n|dkrVtj}t|||S)zReturn battery information.rr6Nr()rxsensors_batteryboolrZPOWER_TIME_UNLIMITEDZPOWER_TIME_UNKNOWNZsbattery)Z acline_statusflagsrcZsecsleftZ power_pluggedZ no_batteryZchargingr.r.r/rs  rcCs,tt}t|tdkr tS|a|SdS)z:The system boot time expressed in seconds since the epoch.rN)rrx boot_timeabs _last_btimerr.r.r/rs  rcCsHg}t}|D]2}|\}}}t|}t|d||d}||q|S)z:Return currently connected users as a list of namedtuples.N)rxusersrrZsuserr)retlistrrr[hostnameZtstamprr.r.r/rs  rccs*tD]\}}tt|t|VqdS)z*Yields a list of WindowsService instances.N)rxZwinservice_enumerateWindowsServicer)r display_namer.r.r/r scCst|d}|d|_|S)zBOpen a Windows service and return it as a WindowsService instance.Nr)r _query_config _display_name)rZservicer.r.r/r!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)selfrrr.r.r/__init__szWindowsService.__init__cCs d|j|jf}d|jj|fS)Nz(name=%r, display_name=%r)z%s%s)rr __class__r+)rdetailsr.r.r/__str__ s zWindowsService.__str__cCsd|t|fS)Nz <%s at %s>)ridrr.r.r/__repr__szWindowsService.__repr__cCst|tstS|j|jkSr)r~rNotImplementedrrotherr.r.r/__eq__s zWindowsService.__eq__cCs ||k Srr.rr.r.r/__ne__szWindowsService.__ne__c CsH|t|j\}}}}W5QRXtt|t|t|t|dS)N)rbinpathusername start_type)_wrap_exceptionsrxZwinservice_query_configrrr)rrrrrr.r.r/rs  zWindowsService._query_configc Cs<|t|j\}}W5QRX|dkr0d}t||dS)Nr)rr)rrxZwinservice_query_statusrr)rrrr.r.r/ _query_status,s  zWindowsService._query_statusc csz dVWnvtk r}zXt|r@d|j}td|j|dn0|jtjtjhkrnd|j}td|j|dnW5d}~XYnXdS)z{Ctx manager which translates bare OSError and WindowsError exceptions into NoSuchProcess and AccessDenied. Nz2service %r is not querable (not enough privileges)rrmsgzservice %r does not exist) OSErroris_permission_errrrwinerrorrxZERROR_INVALID_NAMEZERROR_SERVICE_DOES_NOT_EXISTr)rerrrr.r.r/r3s   zWindowsService._wrap_exceptionscCs|jS)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. )rrr.r.r/rLszWindowsService.namecCs|jS)z_The service display name. The value is cached when this class is instantiated. )rrr.r.r/rSszWindowsService.display_namecCs |dS)zwThe fully qualified path to the service binary/exe file as a string, including command line arguments. rrrr.r.r/rYszWindowsService.binpathcCs |dS)z,The name of the user that owns this service.rrrr.r.r/r_szWindowsService.usernamecCs |dS)zRA string which can either be "automatic", "manual" or "disabled". rrrr.r.r/rcszWindowsService.start_typecCs |dS)zzThe process PID, if any, else None. This can be passed to Process class to control the service's process. rrrr.r.r/rkszWindowsService.pidcCs |dS)zService status as a string.rrrr.r.r/rqszWindowsService.statuscCstt|S)zService long description.)rrxZwinservice_query_descrrrr.r.r/ descriptionuszWindowsService.descriptioncCs>|}||||d<||d<||d<|S)zUUtility method retrieving all the information above as a dictionary. rrr)rupdaterrrr)rdr.r.r/as_dict{s    zWindowsService.as_dictN)r+r,r-__doc__rrrrrrr contextlibcontextmanagerrrrrrrrrrrr.r.r.r/rs&  rcCs@t|tst||jtjtjhkr(dSt|ddtjtj hkS)z*Return True if this is a permission error.Trr() r~rrerrnoEPERMEACCESgetattrrxZERROR_ACCESS_DENIEDZERROR_PRIVILEGE_NOT_HELD)excr.r.r/rs rcCsFt|tst|t|r&t||dS|jtjkr>t||dS|dS)z3Convert OSError into NoSuchProcess or AccessDenied.rrN)r~rrrrrZESRCHr)rrrr.r.r/convert_oserrors    rcstfdd}|S)zDDecorator which converts OSError into NoSuchProcess or AccessDenied.c sLz|f||WStk rF}zt||j|jdW5d}~XYnXdS)Nr)rrrr)rargskwargsrfunr.r/wrappersz wrap_exceptions..wrapper functoolswrapsrrr.rr/wrap_exceptionssr cstfdd}|S)zWorkaround for https://github.com/giampaolo/psutil/issues/875. See: https://stackoverflow.com/questions/4457745#4457745. c sd}d}t|D]n}z|f||WStk r|}z4|}|jtkrjt|t|dd}WYqW5d}~XYqXqd||}t|j |j |ddS)N-C6?!r0{Gz?zH{} retried {} times, converted to AccessDenied as it's stillreturning {}r) r WindowsErrorrERROR_PARTIAL_COPYtimesleepminformatrrr)rrrdelaytimes_rrrr.r/rs&   z)retry_error_partial_copy..wrapperrr r.rr/retry_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 dQd%d&Ze d'd(Ze dRd*d+Ze d,d-Ze d.d/Ze d0d1Ze d2d3Ze d4d5Ze e d6d7Ze d8d9Z e dSd;d<Z!e d=d>Z"e d?d@Z#e dAdBZ$e dCdDZ%e dEdFZ&e dGdHZ'e dIdJZ(e dKdLZ)e dMdNZ*e dOdPZ+d$S)TProcessz1Wrapper class around underlying C implementation._cacher_ppidrcCs||_d|_d|_dSr)rrr)rrr.r.r/rszProcess.__init__cCs|j||j|dSr) _proc_infoZcache_activateexerr.r.r/ oneshot_enters zProcess.oneshot_entercCs|j||j|dSr)rZcache_deactivaterrr.r.r/ oneshot_exit s zProcess.oneshot_exitcCs$t|j}t|ttks t|S)zOReturn multiple information about this process as a raw tuple. )rxZ proc_inforry pinfo_maprrrr.r.r/r s zProcess._proc_infocCs,|jdkrdS|jdkrdStj|S)zbReturn process name, which on Windows is always the final part of the executable. rzSystem Idle Processr3System)rrzrmbasenamerrr.r.r/rs   z Process.namec Cstr`zt|j}Wqltk r\}z*|jdkrJtd|t|j|jW5d}~XYqlXn t|j}t sxt |}| drt |S|S)Nz%r translated into AccessDeniedru) PYPYrxZproc_exerrrr rrrr startswithr})rrrr.r.r/r"s    z Process.exec Cstjtjkrbztj|jdd}Wqrtk r^}z t|rLtj|jdd}nW5d}~XYqrXntj|jdd}trz|Sdd|DSdS)NT)Zuse_pebFcSsg|] }t|qSr.r)rr{r.r.r/rIsz#Process.cmdline..)rxZWINVERZ WINDOWS_8_1Z proc_cmdlinerrrr)rrrr.r.r/cmdline7s zProcess.cmdlinecCs6t|j}|r*ts*t|ts*tt|tt |Sr) rxZ proc_environrrr~rrrrr)rZustrr.r.r/environKs zProcess.environcCs6zt|jWStk r0t|j|jYnXdSr)ppid_maprKeyErrorrrrr.r.r/ppidSsz Process.ppidcCszt|jWStk r}zt|rtd|}|td|td|td|td|td|td|td|td |td |td f WYSW5d}~XYnXdS) Nz*attempting memory_info() fallback (slower)rPrQrRrSrTrUrVrWrXrY)rxZproc_memory_inforrrr rr)rrinfor.r.r/_get_raw_meminfoYs$          zProcess._get_raw_meminfocCs(|}|d}|d}t||f|S)Nr0r5)r,rf)rtrgrhr.r.r/ memory_infopszProcess.memory_infocCs,|}t|j}|t9}t||fSr)r.rxZproc_memory_ussrrrj)rZ basic_memrkr.r.r/memory_full_infozs  zProcess.memory_full_infoc cszt|j}Wn2tk rB}zt||j|jW5d}~XYn>X|D]6\}}}}t|}tsht|}t |}||||fVqHdSr) rxZproc_memory_mapsrrrrr}rrhex)rrawraddrpermrmrgr.r.r/ memory_mapss"zProcess.memory_mapscCs t|jSr)rx proc_killrrr.r.r/killsz Process.killcCsX|tjkrt|jn<|ttdtttdthkrHt|j|n d}t |dS)NZ CTRL_C_EVENTZCTRL_BREAK_EVENTzPonly SIGTERM, CTRL_C_EVENT and CTRL_BREAK_EVENT signals are supported on Windows) signalSIGTERMrxr5rrobjectrzr6r)rsigrr.r.r/ send_signals   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 monotonicr rr0r ) rxZINFINITErrrZ proc_waitrr rZTimeoutAbandoned pid_existsrr)rtimeoutZ cext_timeoutZtimerZstop_at exit_coderr.r.r/waits$    z Process.waitcCs2|jdkrdSt|j\}}t|dt|S)Nrr3zNT AUTHORITY\SYSTEMru)rrxZ proc_usernamer)rdomainr[r.r.r/rs zProcess.usernameFc Cspzt|j\}}}|WStk rj}z4t|rX|r8td|tdWYSW5d}~XYnXdS)Nz*attempting create_time() fallback (slower)rH)rx proc_timesrrrr rr)rZ fast_only_userZ_systemcreatedrr.r.r/rHszProcess.create_timecCs|tdS)NrI)rrrr.r.r/rIszProcess.num_threadscCs<t|j}g}|D]"\}}}t|||}||q|Sr)rxZ proc_threadsrrZpthreadr)rrrZ thread_idutimeZstimentupler.r.r/threadss   zProcess.threadsc Cs|zt|j\}}}WnTtk rj}z6t|s2td|}|td}|td}W5d}~XYnXt ||ddS)Nz(attempting cpu_times() fallback (slower)rFrGr) rxrCrrrr rrrZ pcputimes)rr[r\Z_createdrr+r.r.r/rs zProcess.cpu_timescCst|jddS)NTrxZproc_suspend_or_resumerrr.r.r/suspendszProcess.suspendcCst|jddS)NFrIrr.r.r/resumeszProcess.resumecCs4|jdkrt|j|jt|j}ttj|S)NrA) rrrrxZproc_cwdrrzrmnormpath)rrmr.r.r/cwd s  z Process.cwdcCsd|jdkrgSt}t|j}|D]6}t|}t|r$tsDt|}t |d}| |q$t |S)NrAr() rrrxZproc_open_filesr}r rrrZ popenfilerr)rrZraw_file_names_filerGr.r.r/ open_filess    zProcess.open_filesinetcCst||jdS)N)r)rr)rrr.r.r/r&szProcess.net_connectionscCs t|j}tdk rt|}|Sr)rxZproc_priority_getrenumr*rvaluer.r.r/nice_get*s zProcess.nice_getcCst|j|Sr)rxZproc_priority_setrrRr.r.r/nice_set1szProcess.nice_setcCs t|j}tdk rt|}|Sr)rxZproc_io_priority_getrrQr2r r.r.r/ ionice_get5s zProcess.ionice_getcCs>|rd}t||tttthkr,td|t|j|dS)Nz&value argument not accepted on Windowsz%s is not a valid priority) TypeErrorr"r#r$r%rrxZproc_io_priority_setr)rZioclassrSrr.r.r/ ionice_set<s zProcess.ionice_setc Cszt|j}Wn|tk r}z^t|s,td|}|td|td|td|td|td|tdf}W5d}~XYnXt|S)Nz*attempting io_counters() fallback (slower)rJrKrLrMrNrO) rxZproc_io_countersrrrr rrrp)rrrr+r.r.r/ io_countersJs      zProcess.io_counterscCs t|j}|rtjStjSdSr)rxZproc_is_suspendedrrZSTATUS_STOPPEDZSTATUS_RUNNING)rZ suspendedr.r.r/r]s zProcess.statuscCsdd}t|j}||S)NcsfddtdDS)Ncsg|]}d|>@r|qS)rr.)rirr.r/rhs zBProcess.cpu_affinity_get..from_bitmask..@rr[r.r[r/ from_bitmaskgsz.Process.cpu_affinity_get..from_bitmask)rxZproc_cpu_affinity_getr)rr]bitmaskr.r.r/cpu_affinity_getes zProcess.cpu_affinity_getcCsndd}tttt}|D]4}||krt|ttfsFtd|qtd|q||}t |j |dS)NcSs.|std|d}|D]}|d|O}q|S)Nzinvalid argument %rrr0)r)Zlsoutbr.r.r/ to_bitmaskos  z,Process.cpu_affinity_set..to_bitmaskz&invalid CPU %r; an integer is requiredzinvalid CPU %r) rrryrr~rrrWrrxZproc_cpu_affinity_setr)rrSrbZallcpuscpur^r.r.r/cpu_affinity_setms zProcess.cpu_affinity_setc Cs`zt|jWStk rZ}z.t|rHtd|tdWYSW5d}~XYnXdS)Nz*attempting num_handles() fallback (slower)rD)rxZproc_num_handlesrrrr rr)rrr.r.r/rDszProcess.num_handlescCs|td}t|dS)NrEr)rrrZpctxsw)rrEr.r.r/num_ctx_switchesszProcess.num_ctx_switches)N)F)rP),r+r,r-r __slots__rrrrrrr rrr&r'r*r,r.r/r4r6r;r@rrHrIrHrrJrKrMrOrrTrUrVrXrYrr_rdrDrer.r.r.r/rs           *                   r)r()NN)rrrrrzr7sysr collectionsrrrrrrrr r r r r rrrrZ_compatrrrrrrrrrrrrrx ImportErrorrrlowerr%getwindowsversionr RuntimeErrorrQZ__extra__all__r&rbuiltin_module_namesr$r'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%r2rrrZr`rf_fieldsrjrlrvrnrpr}rrrrZdisk_io_countersrrrrrrrrrrrrrrrrrrr r!rZpidsr=r(rrr rrr.r.r.r/s                                !             0