B 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%yddl mZ&Wnje'k rZ(zJe)e(*+dre,dd krd!Z-e-d"7Z-e-d#7Z-e.e-nWddZ([(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)PY3)range)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__rrrrrrr/r/D/opt/alt/python37/lib64/python3.7/site-packages/psutil/_pswindows.pyr+ms r+rc@seZdZdZdZdZdZdS) IOPriorityrrr1rN)r,r-r.r#r$r%r&r/r/r/r0r2}sr2r  ) 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 availablepercentusedfreepmemrssvmsrOrPrQrRrSZpeak_nonpaged_poolZ nonpaged_poolrVrWZprivatepfullmem)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_QueryDosDevicelenosrj)sZrawdriveZ driveletterZ remainderr/r/r0convert_dos_paths rwcCs&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 )rvr/r/r0 py2_strencodes  r{cCstS)N)rs getpagesizer/r/r/r0r|sr|c CsNt}|\}}}}}}|}|}|} ||} t|||dd} t||| | | S)z&System virtual memory as a namedtuple.r)round_)rs virtual_memrr_) memZtotphysZ availphysZtotpagefZ availpagefZtotvirtZfreevirtr`Zavailrcrbrar/r/r0virtual_memorysrcCsBt}|d}|d}||}t||dd}t||||ddS)z=Swap system memory as a (total, used, free, sin, sout) tuple.r1rr)r}r)rsr~rrZsswap)rr`rcrbrar/r/r0 swap_memorys rcCsPtrt|tr|jtdd}t|\}}||}t||dd}t ||||S)z'Return disk usage associated with path.strict)errorsr)r}) rrxbytesdecoder rs disk_usagerrZ sdiskusage)rjr`rcrbrar/r/r0rs rcCst|}dd|DS)zReturn disk partitions.cSsg|]}tj|qSr/)rZ sdiskpart).0xr/r/r0 sz#disk_partitions..)rsdisk_partitions)allrawlistr/r/r0rs rcCs<t\}}}tddttD}t||||j|jS)z)Return system CPU times as a named tuple.cSsg|] }t|qSr/)sum)rnr/r/r0r szcpu_times..)rs cpu_timesrYzip per_cpu_timesr]r^)rZr[r\Z percpu_summedr/r/r0rsrcCs>g}x4tD](\}}}}}t|||||}||qW|S)z6Return system per-CPU times as a list of named tuples.)rsrrYappend)retrZr[r\r]r^itemr/r/r0r%s rcCstS)z0Return the number of logical CPUs in the system.)rscpu_count_logicalr/r/r/r0r.srcCstS)z6Return the number of physical CPU cores in the system.)rsZcpu_count_physr/r/r/r0cpu_count_physical3srcCs$t\}}}}d}t||||S)zReturn CPU statistics.r)rs cpu_statsrZ scpustats)rDZ interruptsZdpcsZsyscallsZsoft_interruptsr/r/r0r8s rcCs(t\}}d}tt||t|gS)zMReturn CPU frequency. On Windows per-cpu frequency is not supported. g)rscpu_freqrZscpufreqfloat)ZcurrZmax_Zmin_r/r/r0r@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)r1)round)rloadr/r/r0rWszgetloadavg..)_loadavg_inititializedrsZinit_loadavg_counter getloadavgtuple)Z raw_loadsr/r/r0rLs rc Cs|tkr(td|dddtDft|\}}t|||}t}xL|D]D}|\}}} } } } } t||| | | | t|dkr| ndd}||qNWt |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/)repr)rrr/r/r0resz#net_connections..r)N)pid) r ValueErrorrqrsnet_connectionssetr TCP_STATUSESaddlist)kind_pidZfamiliestypesrrrfdZfamtypeZladdrZraddrstatusrntr/r/r0r_s  rcCs|i}t}xj|D]^\}}ts@t|ts8tt|t|}|\}}}}t t dr`t |}t ||||||<qW|S)z)Get NIC stats (isup, duplex, speed, mtu). NicDuplex) rs net_if_statsitemsrrxrAssertionErrorrr{hasattrrrZ snicstats)rZrawdictnamerZisupZduplexZspeedZmtur/r/r0rqs   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/r0rsz#net_io_counters..)rsnet_io_countersdictr)rr/r/r0rsrcCs<g}x2tD]&}t|}t|d|d<||qW|S)z,Return the addresses associated to each NIC.r)rs net_if_addrsrr{r)rrr/r/r0rs rcCsdt\}}}}|dk}t|d@}t|d@}|r8dS|s@|rHtj}n|dkrVtj}t|||S)zReturn battery information.rr5Nr))rssensors_batteryboolrZPOWER_TIME_UNLIMITEDZPOWER_TIME_UNKNOWNZsbattery)Z acline_statusflagsraZsecsleftZ power_pluggedZ no_batteryZchargingr/r/r0rs  rcCs,tt}t|tdkr tS|a|SdS)z:The system boot time expressed in seconds since the epoch.rN)rrs boot_timeabs _last_btime)rr/r/r0rs  rcCsLg}t}x:|D]2}|\}}}t|}t|d||d}||qW|S)z:Return currently connected users as a list of namedtuples.N)rsusersr{rZsuserr)retlistrrrZZhostnameZtstamprr/r/r0rs  rccs.x(tD]\}}tt|t|Vq WdS)z*Yields a list of WindowsService instances.N)rsZwinservice_enumerateWindowsServicer{)r display_namer/r/r0r!scCst|d}|d|_|S)zBOpen a Windows service and return it as a WindowsService instance.Nr)r _query_config _display_name)rZservicer/r/r0r"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||_||_dS)N)_namer)selfrrr/r/r0__init__szWindowsService.__init__cCs d|j|jf}d|jj|fS)Nz(name=%r, display_name=%r)z%s%s)rr __class__r,)rZdetailsr/r/r0__str__szWindowsService.__str__cCsd|t|fS)Nz <%s at %s>)rid)rr/r/r0__repr__szWindowsService.__repr__cCst|tstS|j|jkS)N)rxrNotImplementedr)rotherr/r/r0__eq__s zWindowsService.__eq__cCs ||k S)Nr/)rrr/r/r0__ne__szWindowsService.__ne__c CsH|t|j\}}}}WdQRXtt|t|t|t|dS)N)rbinpathusername start_type)_wrap_exceptionsrsZwinservice_query_configrrr{)rrrrrr/r/r0rs zWindowsService._query_configc Cs<|t|j\}}WdQRX|dkr0d}t||dS)Nr)rr)rrsZwinservice_query_statusrr)rrrr/r/r0 _query_statuss  zWindowsService._query_statusc cs~y dVWnntk rx}zPt|r|}||||d<||d<||d<|S)zUUtility method retrieving all the information above as a dictionary. rrr)rupdaterrrr)rdr/r/r0as_dictPs    zWindowsService.as_dictN)r,r-r.__doc__rrrrrrr contextlibcontextmanagerrrrrrrrrrrr/r/r/r0rs$ rcCs<t|tst||jtjtjfkp:t|ddtjtj fkS)z*Return True if this is a permission error.rr)) rxrrerrnoZEPERMZEACCESgetattrrsZERROR_ACCESS_DENIEDZERROR_PRIVILEGE_NOT_HELD)excr/r/r0rsrcCsFt|tst|t|r&t||dS|jtjkr>t||dS|dS)z3Convert OSError into NoSuchProcess or AccessDenied.)rrN)rxrrrrrZESRCHr)rrrr/r/r0convert_oserrors    rcstfdd}|S)zDDecorator which converts OSError into NoSuchProcess or AccessDenied.c sJy|f||Stk rD}zt||j|jdWdd}~XYnXdS)N)rr)rrrr)rargskwargsr)funr/r0wrappersz wrap_exceptions..wrapper) functoolswraps)rrr/)rr0wrap_exceptionssrcstfdd}|S)zWorkaround for https://github.com/giampaolo/psutil/issues/875. See: https://stackoverflow.com/questions/4457745#4457745 c sd}d}xt|D]d}y|f||Stk rt}z0|}|jtkrbt|t|dd}wnWdd}~XYqXqWd||f}t|j|j |ddS)Ng-C6?!r1g{Gz?zI%s retried %s times, converted to AccessDenied as it's still returning %r)rrr) r WindowsErrorrERROR_PARTIAL_COPYtimesleepminrrr) rrrdelaytimesr_rr)rr/r0rs   z)retry_error_partial_copy..wrapper)rr)rrr/)rr0retry_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|_dS)N)rrr)rrr/r/r0rszProcess.__init__cCs|j||j|dS)N) _proc_infoZcache_activateexe)rr/r/r0 oneshot_enters zProcess.oneshot_entercCs|j||j|dS)N)rZcache_deactivater)rr/r/r0 oneshot_exits zProcess.oneshot_exitcCs$t|j}t|ttks t|S)zOReturn multiple information about this process as a raw tuple. )rsZ proc_inforrt pinfo_mapr)rrr/r/r0rs zProcess._proc_infocCs,|jdkrdS|jdkrdStj|S)zbReturn process name, which on Windows is always the final part of the executable. rzSystem Idle Processr ZSystem)rrurjbasenamer)rr/r/r0rs   z Process.namec Cstr`yt|j}Wqltk r\}z*|jdkrJtd|t|j|jWdd}~XYqlXn t|j}t sxt |}| drt |S|S)Nz%r forced into AccessDeniedrp) PYPYrsZproc_exerrrrrrrr{ startswithrw)rrrr/r/r0rs    z Process.exec Cstjtjkrbytj|jdd}Wqrtk r^}z t|rLtj|jdd}nWdd}~XYqrXntj|jdd}trz|Sdd|DSdS)NT)Zuse_pebFcSsg|] }t|qSr/)r{)rrvr/r/r0rsz#Process.cmdline..)rsZWINVERZ WINDOWS_8_1Z proc_cmdlinerrrr)rrrr/r/r0cmdlines zProcess.cmdlinecCs6t|j}|r*ts*t|ts*tt|tt |S)N) rsZ proc_environrrrxrrrrr{)rZustrr/r/r0environs zProcess.environcCs4y t|jStk r.t|j|jYnXdS)N)ppid_maprKeyErrorrr)rr/r/r0ppid!s z Process.ppidcCsy t|jStk r}z~t|r|}|td|td|td|td|td|td|td|td|td |td f SWdd}~XYnXdS) NrOrPrQrRrSrTrUrVrWrX)rsZproc_memory_inforrrrr)rrinfor/r/r0_get_raw_meminfo's           zProcess._get_raw_meminfocCs(|}|d}|d}t||f|S)Nr1r4)r rd)rtrerfr/r/r0 memory_info=szProcess.memory_infocCs,|}t|j}|t9}t||fS)N)r rsZproc_memory_ussrr|rg)rZ basic_memrhr/r/r0memory_full_infoGs  zProcess.memory_full_infoc csyt|j}Wn2tk rB}zt||j|jWdd}~XYnBXx>|D]6\}}}}t|}tsjt|}t |}||||fVqJWdS)N) rsZproc_memory_mapsrrrrrwrr{hex)rrawrZaddrZpermrjrer/r/r0 memory_mapsNs"zProcess.memory_mapscCs t|jS)N)rs proc_killr)rr/r/r0kill]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) signalSIGTERMrsrrrobjectrurr)rZsigr/r/r0 send_signalas zProcess.send_signalNcCs|dkrtj}n t|d}ttdtj}|dk r<||nd}yt|j|}Wn>tjk rxt||j|jYntj k rd}YnXd}xJt |js|S|r||krt||j|jdt |t |dd}qWdS)NiZ monotonicg-C6?)rrr1g{Gz?) rsZINFINITEintrrZ proc_waitrrrZTimeoutAbandoned pid_existsrr)rZtimeoutZ cext_timeoutZtimerZstop_atZ exit_coderr/r/r0waitns&    z Process.waitcCs2|jdkrdSt|j\}}t|dt|S)N)rr zNT AUTHORITY\SYSTEMrp)rrsZ proc_usernamer{)rZdomainrZr/r/r0rs zProcess.usernamec CsXyt|j\}}}|Stk rR}zt|r@|tdSWdd}~XYnXdS)NrG)rs proc_timesrrrrr)rrZr[createdrr/r/r0rGszProcess.create_timecCs|tdS)NrH)rr)rr/r/r0rHszProcess.num_threadscCs@t|j}g}x*|D]"\}}}t|||}||qW|S)N)rsZ proc_threadsrrZpthreadr)rrrZ thread_idutimeZstimentupler/r/r0threadss  zProcess.threadsc Cstyt|j\}}}WnLtk rb}z.t|s2|}|td}|td}Wdd}~XYnXt||ddS)NrErFg) rsrrrrrrrZ pcputimes)rrZr[rrrr/r/r0rs zProcess.cpu_timescCst|jddS)NT)rsproc_suspend_or_resumer)rr/r/r0suspendszProcess.suspendcCst|jddS)NF)rsrr)rr/r/r0resumeszProcess.resumecCs4|jdkrt|j|jt|j}ttj|S)N)rr ) rrrrsZproc_cwdr{rurjnormpath)rrjr/r/r0cwds  z Process.cwdcCsh|jdkrgSt}t|j}x>|D]6}t|}t|r&tsFt|}t |d}| |q&Wt |S)N)rr r)) rrrsZproc_open_filesrwr rr{rZ popenfilerr)rrZraw_file_namesZ_filerr/r/r0 open_filess    zProcess.open_filesinetcCst||jdS)N)r)rr)rrr/r/r0 connectionsszProcess.connectionscCs t|j}tdk rt|}|S)N)rsZproc_priority_getrenumr+)rvaluer/r/r0nice_gets zProcess.nice_getcCst|j|S)N)rsZproc_priority_setr)rr'r/r/r0nice_setszProcess.nice_setcCs t|j}tdk rt|}|S)N)rsZproc_io_priority_getrr&r2)rrr/r/r0 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&rrsZproc_io_priority_setr)rZioclassr'r/r/r0 ionice_sets  zProcess.ionice_setc Csyt|j}Wnttk r}zVt|s,|}|td|td|td|td|td|tdf}Wdd}~XYnXt|S)NrIrJrKrLrMrN)rsZproc_io_countersrrrrrrm)rrrrr/r/r0 io_counters s      zProcess.io_counterscCs t|j}|rtjStjSdS)N)rsZproc_is_suspendedrrZSTATUS_STOPPEDZSTATUS_RUNNING)rZ suspendedr/r/r0rs zProcess.statuscCsdd}t|j}||S)NcsfddtdDS)Ncsg|]}d|>@r|qS)rr/)ri)rr/r0r'szBProcess.cpu_affinity_get..from_bitmask..@)r)rr/)rr0 from_bitmask&sz.Process.cpu_affinity_get..from_bitmask)rsZproc_cpu_affinity_getr)rr0bitmaskr/r/r0cpu_affinity_get$s zProcess.cpu_affinity_getcCsrdd}tttt}x<|D]4}||kr t|ttfsHtd|q td|q W||}t |j |dS)NcSs2|std|d}x|D]}|d|O}qW|S)Nzinvalid argument %rrr1)r)Zlsoutbr/r/r0 to_bitmask-s   z,Process.cpu_affinity_set..to_bitmaskz&invalid CPU %r; an integer is requiredzinvalid CPU %r) rrrtrrxrrr+rrsZproc_cpu_affinity_setr)rr'r5ZallcpusZcpur1r/r/r0cpu_affinity_set+s   zProcess.cpu_affinity_setc CsNy t|jStk rH}zt|r6|tdSWdd}~XYnXdS)NrC)rsZproc_num_handlesrrrrr)rrr/r/r0rCDs  zProcess.num_handlescCs|td}t|dS)NrDr)rrrZpctxsw)rrDr/r/r0num_ctx_switchesMszProcess.num_ctx_switches)N)r$),r,r-r.r __slots__rrrr rrrrrrrrr r r rrrrrrGrHrrrr r"r#r%r(r)r*r,r-rr2r6rCr7r/r/r/r0rsX       *              r)r))NN)rrrrrursysr collectionsrrrrrrr r r r r rrrrZ_compatrrrrrrrrrrrrrs ImportErrorrrylowerrZgetwindowsversionr 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&r2rrrYr_rd_fieldsrgrirqrkrmrwr{r|rrZdisk_io_countersrrrrrrrrrrrrrrrrrrr!r"rrZpidsrrrrrrrr/r/r/r0s8                                              *