3 ̪ef(@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%yddl mZ&Wnje'k rZ(zLe)e(j*j+drej,dd krd!Z-e-d"7Z-e-d#7Z-e.e-nWYddZ([(XnXerddl/Z/ndZ/d$d%d&d'd(d)d*d+d,d-d.d/d0d1gZ0d2Z1d3Z2d4ej3kZ4e/dkrFdZ5ne/j6d5d1diZ7e7j5Z5e&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 rGd6d7d7e/j6ZReSjTeRjUe/dkr dZVdZWd8ZXd9ZYn Gd:d;d;e/j6ZZeSjTeZjUe[ddd8d9dd?d@dAdBdCdDdEdFdGdHdIdJdKdLdMZ\e dNdOdPdQdRdSgZ]e dTdUdVdWdXdYgZ^e dZd[d\d]d^d_d`dadbdcdddedfg Z_e dge_j`dZae didjd[gZbe dkdldmjcebj`Zde dndodpdqdrdsdtgZeedudvdwdxZfdydzZged{d|Zhd}d~ZiddZje&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_cache)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 serverwin_service_iterwin_service_getrrrrrrIOPRIO_VERYLOW IOPRIO_LOW IOPRIO_NORMAL IOPRIO_HIGHCONN_DELETE_TCBAF_LINKZ DELETE_TCBi+__pypy__ AddressFamilyc@s$eZdZeZeZeZeZeZeZdS)PriorityN) __name__ __module__ __qualname__rrrrrrr-r-=/usr/local/lib64/python3.6/site-packages/psutil/_pswindows.pyr)ss r)c@seZdZdZdZdZdZdS) IOPriorityrrr/r0N)r*r+r,r!r"r#r$r-r-r-r.r1sr1 ) 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_poolrVrWZprivatepfullmemuss pmmap_groupedpath pmmap_extz addr perms  pio read_count write_count read_bytes write_bytes other_countZ other_bytesi)maxsizecCs@dj|jddd}tj|}|t|d}tjj||S)zConvert paths using native DOS format like: "\Device\HarddiskVolume1\Windows\systemew\file.txt" into: "C:\Windows\systemew\file.txt". \Nr0)joinsplitcextZQueryDosDevicelenosrj)sZrawdriveZ driveletter remainderr-r-r.convert_dos_paths r|cCs&tr|St|tr|S|jttSdS)zmEncode a unicode string to a byte string by using the default fs encoding + "replace" error handler. N)r isinstancestrencoderr)rzr-r-r. py2_strencodes  rcCstjS)N)rw getpagesizer-r-r-r.rsrc CsJtj}|\}}}}|}|}|}||}t|||dd} t||| ||S)z&System virtual memory as a namedtuple.r)round_)rw virtual_memrr_) memZtotphysZ availphysZtotsysZavailsysr`Zavailrcrbrar-r-r.virtual_memorys rcCsptj}|d}|d}||}|dkrBtj}td||}nd}d}||}t|d}tj||||ddS)z=Swap system memory as a (total, used, free, sin, sout) tuple.rr/g{Gz?gr)rwrZ swap_percentintroundrsswap)rZ total_physZ total_systemr`Z percentswaprbrcrar-r-r. swap_memorys rcCsPtrt|tr|jtdd}tj|\}}||}t||dd}tj ||||S)z'Return disk usage associated with path.strict)errorsr)r) rr}bytesdecoderrw disk_usagerr sdiskusage)rjr`rcrbrar-r-r.rs rcCstj|}dd|DS)zReturn disk partitions.cSsg|]}tj|qSr-)r sdiskpart).0xr-r-r. ,sz#disk_partitions..)rwdisk_partitions)allrawlistr-r-r.r)s rcCs<tj\}}}tddttjD}t||||j|jS)z)Return system CPU times as a named tuple.cSsg|] }t|qSr-)sum)rnr-r-r.r:szcpu_times..)rw cpu_timesrYzip per_cpu_timesr]r^)rZr[r\Z percpu_summedr-r-r.r4srcCs>g}x4tjD](\}}}}}t|||||}|j|qW|S)z6Return system per-CPU times as a list of named tuples.)rwrrYappend)retrZr[r\r]r^itemr-r-r.r@s rcCstjS)z0Return the number of logical CPUs in the system.)rwcpu_count_logicalr-r-r-r.rIsrcCstjS)z-Return the number of CPU cores in the system.)rwcpu_count_coresr-r-r-r.rNsrcCs$tj\}}}}d}tj||||S)zReturn CPU statistics.r)rw cpu_statsr scpustats)rD interruptsZdpcssyscallssoft_interruptsr-r-r.rSsrcCs(tj\}}d}tjt||t|gS)zMReturn CPU frequency. On Windows per-cpu frequency is not supported. g)rwcpu_freqrscpufreqfloat)currZmax_Zmin_r-r-r.r\s rFcCs*tstjdatj}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)r/)r)rloadr-r-r.rtszgetloadavg..)_loadavg_inititializedrwZinit_loadavg_counter getloadavgtuple)Z raw_loadsr-r-r.rhs rc Cs|tkr(td|djddtDft|\}}tj|||}t}xL|D]D}|\}}} } } } } t||| | | | t|dkr| ndd}|j|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-r.rsz#net_connections..rN)pid) r ValueErrorrurwnet_connectionssetr TCP_STATUSESaddlist)kind_pidfamiliestypesrrrfdfamtypeladdrraddrstatusrntr-r-r.r|s(  rcCs~i}tj}xl|jD]`\}}ts@t|ts8tt|t|}|\}}}}t t dr`t j |}t j ||||d||<qW|S)z)Get NIC stats (isup, duplex, speed, mtu). NicDuplex) rw net_if_statsitemsrr}rAssertionErrorrrhasattrrr snicstats)rZrawdictnamerisupduplexspeedmtur-r-r.rs   rcCstj}tdd|jDS)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..)rwnet_io_countersdictr)rr-r-r.rsrcCs<g}x2tjD]&}t|}t|d|d<|j|qW|S)z,Return the addresses associated to each NIC.r)rw net_if_addrsrrr)rrr-r-r.rs rcCsdtj\}}}}|dk}t|d@}t|d@}|r8dS|s@|rHtj}n|dkrVtj}tj|||S)zReturn battery information.rr5Nr)rwsensors_batteryboolrPOWER_TIME_UNLIMITEDPOWER_TIME_UNKNOWNsbattery)Z acline_statusflagsrasecsleft power_pluggedZ no_batteryZchargingr-r-r.rs  rcCs,ttj}t|tdkr tS|a|SdS)z:The system boot time expressed in seconds since the epoch.rN)rrw boot_timeabs _last_btime)rr-r-r.rs  rcCsLg}tj}x:|D]2}|\}}}t|}tj|d||d}|j|qW|S)z:Return currently connected users as a list of namedtuples.N)rwusersrrsuserr)retlistrrrZhostnameZtstamprr-r-r.rs  rccs.x(tjD]\}}tt|t|Vq WdS)z*Yields a list of WindowsService instances.N)rwZwinservice_enumerateWindowsServicer)r display_namer-r-r.rscCst|d}|jd|_|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||_||_dS)N)_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|jt|fS)Nz <%s at %s>)rid)rr-r-r.__repr__szWindowsService.__repr__cCst|tstS|j|jkS)N)r}rNotImplementedr)rotherr-r-r.__eq__s zWindowsService.__eq__cCs ||k S)Nr-)rrr-r-r.__ne__szWindowsService.__ne__c CsH|jtj|j\}}}}WdQRXtt|t|t|t|dS)N)rbinpathusername start_type)_wrap_exceptionsrwZwinservice_query_configrrr)rrrrrr-r-r.r!s zWindowsService._query_configc Cs<|jtj|j\}}WdQRX|dkr0d}t||dS)Nr)rr)rrwZwinservice_query_statusrr)rrrr-r-r. _query_status.s  zWindowsService._query_statusccsy dVWnvtk r}zZt|r@d|j}td|j|dn0|jtjtjfkrnd|j}td|j|dnWYdd}~XnXdS)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_errrrwinerrorrwZERROR_INVALID_NAMEZERROR_SERVICE_DOES_NOT_EXISTr)rerrrr-r-r.r5s   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. )r)rr-r-r.rNszWindowsService.namecCs|jS)z_The service display name. The value is cached when this class is instantiated. )r)rr-r-r.rUszWindowsService.display_namecCs |jdS)zwThe fully qualified path to the service binary/exe file as a string, including command line arguments. r)r)rr-r-r.r[szWindowsService.binpathcCs |jdS)z,The name of the user that owns this service.r)r)rr-r-r.raszWindowsService.usernamecCs |jdS)zRA string which can either be "automatic", "manual" or "disabled". r)r)rr-r-r.reszWindowsService.start_typecCs |jdS)zzThe process PID, if any, else None. This can be passed to Process class to control the service's process. r)r)rr-r-r.rmszWindowsService.pidcCs |jdS)zService status as a string.r)r)rr-r-r.rsszWindowsService.statuscCsttj|jS)zService long description.)rrwZwinservice_query_descrr)rr-r-r. descriptionwszWindowsService.descriptioncCs>|j}|j|j|j|d<|j|d<|j|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$ rcCsHt|tst||jtjtjfkr(dSt|ddtjtj fkrDdSdS)z*Return True if this is a permission error.TrrFr) r}rrerrnoEPERMEACCESgetattrrwZERROR_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    r cstjfdd}|S)zDDecorator which converts OSError into NoSuchProcess or AccessDenied.csJy|f||Stk rD}zt||j|jdWYdd}~XnXdS)N)rr)rr rr)rargskwargsr)funr-r.wrappersz wrap_exceptions..wrapper) functoolswraps)r r r-)r r.wrap_exceptionssrcstjfdd}|S)zWorkaround for https://github.com/giampaolo/psutil/issues/875. See: https://stackoverflow.com/questions/4457745#4457745. csd}d}xnt|D]b}y|f||Stk rr}z0|}|jtkr`tj|t|dd}wWYdd}~XqXqWdj||}t|j |j |ddS)Ng-C6?!r/g{Gz?zH{} retried {} times, converted to AccessDenied as it's stillreturning {})rrr) r WindowsErrorrERROR_PARTIAL_COPYtimesleepminformatrrr)rr r delaytimes_rr)r r-r.r s   z)retry_error_partial_copy..wrapper)rr)r r r-)r r.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 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-r.rszProcess.__init__cCs|jj||jj|dS)N) _proc_infocache_activateexe)rr-r-r. oneshot_enter s zProcess.oneshot_entercCs|jj||jj|dS)N)rcache_deactivater!)rr-r-r. oneshot_exit s zProcess.oneshot_exitcCs$tj|j}t|ttks t|S)zOReturn multiple information about this process as a raw tuple. )rwZ proc_inforrx pinfo_mapr)rrr-r-r.rs zProcess._proc_infocCs,|jdkrdS|jdkrdStjj|jS)zbReturn process name, which on Windows is always the final part of the executable. rzSystem Idle Processr2System)rryrjbasenamer!)rr-r-r.rs   z Process.namecCstr`ytj|j}Wqltk r\}z,|jdkrJtd|t|j|jWYdd}~XqlXn tj|j}t sxt |}|j drt |S|S)Nz%r translated into AccessDeniedrt) PYPYrwZproc_exerrrr rrrr startswithr|)rr!rr-r-r.r!&s    z Process.execCstjtjkrbytj|jdd}Wqrtk r^}z"t|rLtj|jdd}nWYdd}~XqrXntj|jdd}trz|Sdd|DSdS)NT)Zuse_pebFcSsg|] }t|qSr-)r)rrzr-r-r.rMsz#Process.cmdline..)rwZWINVERZ WINDOWS_8_1Z proc_cmdlinerrrr)rrrr-r-r.cmdline;s zProcess.cmdlinecCs8tj|j}|r,t r,t|ts,tt|tt |S)N) rwZ proc_environrrr}rrrrr)rZustrr-r-r.environOs  zProcess.environc Cs4y t|jStk r.t|j|jYnXdS)N)ppid_maprKeyErrorrr)rr-r-r.ppidWs z Process.ppidcCsy tj|jStk r}zt|r|j}|td|td|td|td|td|td|td|td|td |td f SWYdd}~XnXdS) NrOrPrQrRrSrTrUrVrWrX)rwZproc_memory_inforrrrr%)rrinfor-r-r._get_raw_meminfo]s           zProcess._get_raw_meminfocCs(|j}|d}|d}t||f|S)Nr/r4)r1rd)rtrerfr-r-r. memory_infosszProcess.memory_infocCs,|j}tj|j}|t9}t||fS)N)r3rwZproc_memory_ussrrrg)rZ basic_memrhr-r-r.memory_full_info}s  zProcess.memory_full_infoccsytj|j}Wn2tk rB}zt||j|jWYdd}~XnBXx>|D]6\}}}}t|}tsjt|}t |}||||fVqJWdS)N) rwZproc_memory_mapsrrr rr|rrhex)rrawraddrZpermrjrer-r-r. memory_mapss"zProcess.memory_mapscCs tj|jS)N)rw proc_killr)rr-r-r.killsz Process.killcCsX|tjkrtj|jn<|ttdtttdtfkrHtj|j|n d}t |dS)NZ CTRL_C_EVENTZCTRL_BREAK_EVENTzPonly SIGTERM, CTRL_C_EVENT and CTRL_BREAK_EVENT signals are supported on Windows) signalSIGTERMrwr9rrobjectryr:r)rsigrr-r-r. send_signals  zProcess.send_signalNc Cs|dkrtj}n t|d}ttdtj}|dk r<||nd}ytj|j|}Wn>tjk rxt||j|jYntj k rd}YnXd}xJt |js|S|r||krt||j|jdtj |t |dd}qWdS)Ni monotonicg-C6?)rrr/g{Gz?) rwZINFINITErrrZ proc_waitrr rZTimeoutAbandoned pid_existsrr)rtimeoutZ cext_timeoutZtimerZstop_atZ exit_coderr-r-r.waits&    z Process.waitcCs2|jdkrdStj|j\}}t|dt|S)Nrr2zNT AUTHORITY\SYSTEMrt)rr2)rrwZ proc_usernamer)rdomainrZr-r-r.rs zProcess.usernamecCsXytj|j\}}}|Stk rR}z t|r@|jtdSWYdd}~XnXdS)NrG)rw proc_timesrrrrr%)rrZr[createdrr-r-r.rGszProcess.create_timecCs|jtdS)NrH)rr%)rr-r-r.rHszProcess.num_threadscCs@tj|j}g}x*|D]"\}}}tj|||}|j|qW|S)N)rwZ proc_threadsrrpthreadr)rrrZ thread_idutimeZstimentupler-r-r.threadss  zProcess.threadscCstytj|j\}}}WnLtk rb}z0t|s2|j}|td}|td}WYdd}~XnXtj||ddS)NrErFg) rwrErrrrr%r pcputimes)rrZr[rFrr0r-r-r.rs zProcess.cpu_timescCstj|jddS)NT)rwproc_suspend_or_resumer)rr-r-r.suspendszProcess.suspendcCstj|jddS)NF)rwrLr)rr-r-r.resumeszProcess.resumecCs4|jdkrt|j|jtj|j}ttjj|S)Nrr2)rr2) rrrrwZproc_cwdrryrjnormpath)rrjr-r-r.cwds  z Process.cwdcCsh|jdkrgSt}tj|j}x>|D]6}t|}t|r&tsFt|}tj |d}|j |q&Wt |S)Nrr2r)rr2r) rrrwZproc_open_filesr|r rrr popenfilerr)rrZraw_file_names_filerIr-r-r. open_filess    zProcess.open_filesinetcCst||jdS)N)r)rr)rrr-r-r. connections%szProcess.connectionscCs tj|j}tdk rt|}|S)N)rwZproc_priority_getrenumr))rvaluer-r-r.nice_get)s zProcess.nice_getcCstj|j|S)N)rwZproc_priority_setr)rrWr-r-r.nice_set0szProcess.nice_setcCs tj|j}tdk rt|}|S)N)rwZproc_io_priority_getrrVr1)rrr-r-r. ionice_get4s zProcess.ionice_getcCs>|rd}t||ttttfkr,td|tj|j|dS)Nz&value argument not accepted on Windowsz%s is not a valid priority) TypeErrorr!r"r#r$rrwZproc_io_priority_setr)rioclassrWrr-r-r. ionice_set;s zProcess.ionice_setcCsytj|j}Wnttk r}zXt|s,|j}|td|td|td|td|td|tdf}WYdd}~XnXt|S)NrIrJrKrLrMrN)rwZproc_io_countersrrrrr%rm)rrrr0r-r-r. io_countersIs      zProcess.io_counterscCs tj|j}|rtjStjSdS)N)rwZproc_is_suspendedrrSTATUS_STOPPEDSTATUS_RUNNING)r suspendedr-r-r.r[s zProcess.statuscCsdd}tj|j}||S)NcsfddtdDS)Ncsg|]}d|>@r|qS)rr-)ri)rr-r.rfszBProcess.cpu_affinity_get..from_bitmask..@)r)rr-)rr. from_bitmaskesz.Process.cpu_affinity_get..from_bitmask)rwZproc_cpu_affinity_getr)rrdbitmaskr-r-r.cpu_affinity_getcs zProcess.cpu_affinity_getcCsrdd}tttt}x<|D]4}||kr t|ttfsHtd|q td|q W||}t j |j |dS)NcSs2|std|d}x|D]}|d|O}qW|S)Nzinvalid argument %rrr/)r)Zlsoutbr-r-r. to_bitmaskms   z,Process.cpu_affinity_set..to_bitmaskz&invalid CPU %r; an integer is requiredzinvalid CPU %r) rrrxrr}rrr[rrwZproc_cpu_affinity_setr)rrWriZallcpusZcpurer-r-r.cpu_affinity_setks   zProcess.cpu_affinity_setcCsNy tj|jStk rH}z t|r6|jtdSWYdd}~XnXdS)NrC)rwZproc_num_handlesrrrrr%)rrr-r-r.rCs  zProcess.num_handlescCs|jtd}tj|dS)NrDr)rr%rpctxsw)rrDr-r-r.num_ctx_switchesszProcess.num_ctx_switches)N)rT),r*r+r,r __slots__rr"r$rrrrr!rr+r,r/r1r3r4r8r:r?rCrrGrHrJrrMrNrPrSrUrXrYrZr]r^rrfrjrCrlr-r-r-r.rsX       *               rrr)rhr)r)NN)rrrrryr;sysr collectionsrrrrrrrr r r r r rrrr_compatrrrrrrrrrrrrrw ImportErrorrr~lowerr*getwindowsversionr RuntimeErrorrVZ__extra__all__r%rbuiltin_module_namesr)r&IntEnumr(ZMIB_TCP_STATE_ESTABCONN_ESTABLISHEDZMIB_TCP_STATE_SYN_SENT CONN_SYN_SENTZMIB_TCP_STATE_SYN_RCVD CONN_SYN_RECVZMIB_TCP_STATE_FIN_WAIT1CONN_FIN_WAIT1ZMIB_TCP_STATE_FIN_WAIT2CONN_FIN_WAIT2ZMIB_TCP_STATE_TIME_WAITCONN_TIME_WAITZMIB_TCP_STATE_CLOSED CONN_CLOSEZMIB_TCP_STATE_CLOSE_WAITCONN_CLOSE_WAITZMIB_TCP_STATE_LAST_ACK CONN_LAST_ACKZMIB_TCP_STATE_LISTEN CONN_LISTENZMIB_TCP_STATE_CLOSING CONN_CLOSINGZMIB_TCP_STATE_DELETE_TCBZPSUTIL_CONN_NONE CONN_NONErr)globalsr __members__r!r"r#r$r1rr%rYr_rd_fieldsrgrirurkrmr|rrrrZdisk_io_countersrrrrrrrrrrrrrrrrrrrr rZpidsrAr-rr rrrr-r-r-r.s8                                               0