a M_]y@sfdZddlZddlZddlZddlZddlmmZddl m Z ddl m Z ddl m Z ddl mZddl mZdd l mZdd l mZdd l mZdd l mZdd l mZddl mZddl mZddl mZddl mZddl mZddl mZddl mZddlmZddlm Z ddlm!Z!ddlm"Z"gZ#erzej$e j%ej&e j'ej(e j)ej*e j+ej,e j-ej.e j/ej0e j1iZ2n~erej$e j%ej(e j)ej*e j+ej3e j-ej,e j-ej&e j4ej5e j'iZ2n:erej$e j%ej(e j)ej*e j+ej,e j-ej&e j4ej5e j'iZ2ej6e j7ej8e j9ej:e j;eje j?ej@e jAejBe jCejDe jEejFe jGejHe jIejJe jKejLe jMi ZNeOZPejQZQeRedZSeRedZTeRedZUeRedZVeWdddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4ZXe d5gd6ZYe d7gd8ZZe d9gd:Z[e[Z\e d;gd<Z]e d=d>Z^e d?d@Z_er2e dAgdBZ`ne dAgdCZ`dDdEZadFdGZbdHdIZceSrhdJdZdndKdZddLed_edMdNZfeserdOdPZgndQdPZgdRdSZhdrdTdUZiejjZjejkZkejlZlejmZmdVdWZndXdYZoerdZd[Zpd\d]Zqd^d_Zrd`daZsdbdcZtedddeZudfdgZves$er.dhdiZwnejwZwdjdkZxdldmZyejzdndoZ{Gdpdqdqe|Z}dS)sz5FreeBSD, OpenBSD and NetBSD platforms implementation.N) namedtuple) defaultdict)_common)_psposix) _psutil_bsd) _psutil_posix) AccessDenied) conn_tmap)conn_to_ntuple)FREEBSD)memoize)memoize_when_activated)NETBSD) NoSuchProcess)OPENBSD) usage_percent) ZombieProcess)FileNotFoundError)PermissionError)ProcessLookupError)which per_cpu_timesproc_num_threadsproc_open_files proc_num_fds )ppidstatusreal_uid effective_uid saved_uidreal_gid effective_gid saved_gidttynr create_timectx_switches_volctx_switches_unvol read_io_countwrite_io_count user_timesys_time ch_user_time ch_sys_timerssvmsmemtextmemdatamemstackcpunumnamesvmem) totalZ availablepercentusedfreeactiveinactivebufferscachedsharedwired scputimesusernicesystemidleirqpmem)rErFtextdatastack pcputimes)rYr[ children_userchildren_system pmmap_grouped*path rss, private, ref_count, shadow_count pmmap_ext6addr, perms path rss, private, ref_count, shadow_countsdiskio) read_count write_count read_bytes write_bytesZ read_timeZ write_timeZ busy_time)rjrkrlrmc Cst}|\}}}}}}}}trtddX} | D]B} | drTt| dd}q0| dr0t| dd}q0Wdn1s0Y|||} |||} t|| |dd} t|| | | ||||||| S) z&System virtual memory as a namedtuple.z /proc/meminforbsBuffers:ris MemShared:NZround_) cextZ virtual_memropen startswithintsplitrrL)ZmemrMrPrQrRrVrTrSrUflineZavailrOrNrw3/usr/lib64/python3.9/site-packages/psutil/_psbsd.pyvirtual_memorys   4    rycCs4t\}}}}}t||dd}t||||||S)z@System swap memory as (total, used, free, sin, sout) namedtuple.rro)rpZswap_memrrZsswap)rMrOrPZsinZsoutrNrwrwrx swap_memorysrzcCs"t\}}}}}t|||||S)z+Return system per-CPU times as a namedtuple)rp cpu_timesrWrXrwrwrxr{sr{cCs>g}tD],}|\}}}}}t|||||}||q |S)'Return system CPU times as a namedtuple)rprrWappend)retZcpu_trYrZr[r\r]itemrwrwrxrs   cCs.tdkrtgStjr tddt_tgS)r|r&supported only starting from FreeBSD 8T)cpu_count_logicalr{r __called__NotImplementedErrorrwrwrwrxrs  FcCstS)z0Return the number of logical CPUs in the system.)rprrwrwrwrxrsrcCstdkrdSdS)Nr)rrwrwrwrxcpu_count_physicalsrcCsd}t}|durj|d}|dkrj|d|d}t|}zt|dpRd}W|n |0|s|tdkr|dS|S)z1Return the number of physical CPUs in the system.Nz r#zgroup/children/group/cpur) rpZcpu_count_physrfindETZ fromstringlenfindallclearr)r~sindexrootrwrwrxrs   c Cstrt\}}}}}ntrt\}}}}}}}tdd4}|D]}|drBt|d}qBWdq1sv0Yntrt\}}}}}}}t ||||S)z*Return various CPU stats as a named tuple.z /proc/statrnsintrrN) r rp cpu_statsrrqrrrsrtrrZ scpustats) ZctxswZintrsZ soft_intrsZsyscallsZtrapsZfaultsZforksrurvrwrwrxrs   2rc CsLg}t}|D]6}|\}}}}d}} t|||||| } || q|S)zReturn mounted disk partitions as a list of namedtuples. 'all' argument is ignored, see: https://github.com/giampaolo/psutil/issues/906 N)rpdisk_partitionsrZ sdiskpartr}) allretlistZ partitions partitionZdeviceZ mountpointZfstypeZoptsZmaxfileZmaxpathntuplerwrwrxr?s   rc Cst}i}|D]}z&t|}t|}t|\}}Wn2tyn}z|jtjkrZWYd}~qd}~00t t drt |}t ||||||<q|S)z)Get NIC stats (isup, duplex, speed, mtu).N NicDuplex) net_io_counterskeys cext_posixZ net_if_mtuZnet_if_is_runningZnet_if_duplex_speedOSErrorerrnoZENODEVhasattrrrZ snicstats)namesr~rKZmtuZisupZduplexZspeederrrwrwrx net_if_stats\s      rc Cstrrg}tD]^}zt||}Wnttfy>YqYq0|D]&}t|}|||tj |qDq|S|tj vrt d|d ddt Dft |\}}t }trtd}nt}|D]F}|\} } } } } }}| |vr| |vrt| | | | | |t|}||qt|S)z System-wide network connections.+invalid %r kind argument; choose between %s, cSsg|] }t|qSrwrepr.0xrwrwrx z#net_connections..r)rpidsProcess connectionsrrlistr}rZsconnr ValueErrorjoinsetrrpnet_connectionsr TCP_STATUSESadd)kindr~pidZconsZconnfamiliestypesrawlistrfdfamtypeladdrraddrr4ntrwrwrxrps:       rcCsbzt\}}}Wnty&YdS0|dk}|rYqYn0|rz t|dddd}Wnttfy~d}Yn0z t|dddd}Wnttfyd}Yn0| t |||q|S)zReturn frequency metrics for CPUs. As of Dec 2018 only CPU 0 appears to be supported by FreeBSD and all other cores match the frequency of CPU 0.  r/rN) rrrpZ cpu_frequencyrrsrt IndexErrorrr}rZscpufreq)r~rrrZavailable_freqZmin_freqZmax_freqrwrwrxcpu_freqs$       rcCstS)z:The system boot time expressed in seconds since the epoch.)rp boot_timerwrwrwrxrsrc Cs^g}t}|D]H}|\}}}}}|dkr.d}|dkr8qt||pDd|||}||q|S)z:Return currently connected users as a list of namedtuples.rN~)rpusersrZsuserr}) rrrrYZttyhostnameZtstamprrrwrwrxrs rcCs@ztdWn&ty$YdSty6YdS0dSdS)NrFT)rrKrr rwrwrwrx _pid_0_existss  rcCs*t}tr&d|vr&tr&|dd|S)z7Returns a list of PIDs currently running on the system.r)rprrrinsert)r~rwrwrxrs rcCs t|}|s|tvSdSdS)zReturn True if pid exists.TN)r pid_existsr)rexistsrwrwrxr s  rcCs8zt|td}|tjkWSty2YdS0dS)Nr4F)rpproc_oneshot_infokinfo_proc_mapSZOMB Exception)rstrwrwrx is_zombies   rcstfdd}|S)z`Decorator which translates bare OSError exceptions into NoSuchProcess and AccessDenied. csz|g|Ri|WStyVt|jrDt|j|j|jnt|j|jYnXtytt|j|jYn:t y|jdkrdt vrt|j|jnYn0dSNr) rrrr_name_ppidrrr rr)selfargskwargsfunrwrxwrapper#s      z wrap_exceptions..wrapper) functoolswraps)rrrwrrxwrap_exceptionssrc cspz dVWn`ttfyLt|jr:t|j|j|jnt|j|jYn tyjt |j|jYn0dS)z8Same as above, for routines relying on reading /proc fs.N) rrrrrrrrrr )instrwrwrxwrap_exceptions_procfs8s   rc@seZdZdZgdZddZddZeeddZ d d Z d d Z ed dZ eddZ eddZeddZeddZeddZeddZeddZeddZeredd Zed!d"ZeZed#d$Zed%d&Zed'd(Zed)d*ZedLd,d-ZedMd/d0Zed1d2Zed3d4Z ed5d6Z!ed7d8Z"ed9d:Z#e$d;d<Z%e$d;d=Z&d>d?Z'e(red@dAZ)ne'Z)e*redBdCZ+ne'Z+eredDdEZ,edFdGZ-edHdIZ.edNdJdKZ/d.S)Orz1Wrapper class around underlying C implementation.)rrr_cachecCs||_d|_d|_dSN)rrr)rrrwrwrx__init__NszProcess.__init__cCst|jdS)z+Raise NSP if the process disappeared on us.N)rp proc_namerrrwrwrx _assert_aliveSszProcess._assert_alivecCst|j}|S)z;Retrieves multiple process info in one shot as a raw tuple.)rprrrr~rwrwrxoneshotYs zProcess.oneshotcCs|j|dSr)rZcache_activaterrwrwrx oneshot_enteraszProcess.oneshot_entercCs|j|dSr)rZcache_deactivaterrwrwrx oneshot_exitdszProcess.oneshot_exitcCs(|td}|dur|St|jS)NrK)rrrprr)rrKrwrwrxrKgsz Process.namecCstr|jdkrdSt|jStrj|jdkr0dSt| td|jWdS1s^0Yn |}|rt |dpdSdSdS)Nrz /proc/%s/exe) r rrpZproc_exerrosreadlinkcmdliner)rrrwrwrxexels    0z Process.exec Cstr|jdkrgStrzt|jWSty}zh|jtjkrt|jr^t |j|j |j qt |js|t |j|j |j qgWYd}~SnWYd}~qd}~00n t|jSdSr)rrrrpZ proc_cmdlinerrEINVALrrrrrr)rrrwrwrxrs   zProcess.cmdlinecCs t|jSr)rpZ proc_environrrrwrwrxenvironszProcess.environcCs<|td}t}z ||WSty6YdS0dS)Nr;)rrrZget_terminal_mapKeyError)rZtty_nrZtmaprwrwrxterminals   zProcess.terminalcCs|td|_|jS)Nr3)rrrrrwrwrxr3sz Process.ppidcCs.|}t|td|td|tdS)Nr5r6r7)rrZpuidsrrZrawtuplerwrwrxuidss    z Process.uidscCs.|}t|td|td|tdS)Nr8r9r:)rrZpgidsrrrwrwrxgidss    z Process.gidscCs8|}t|td|td|td|tdS)NrArBrCrD)rrrbrrrwrwrxr{s    zProcess.cpu_timescCs|tdS)NrJrrrrwrwrxcpu_numszProcess.cpu_numcCs@|}t|td|td|td|td|tdS)NrErFrGrHrI)rr^rrrwrwrx memory_infos     zProcess.memory_infocCs|tdS)Nr<rrrwrwrxr<szProcess.create_timecCs trt|jSt|SdSr)HAS_PROC_NUM_THREADSrprrrthreadsrrwrwrx num_threadss zProcess.num_threadscCs$|}t|td|tdS)Nr=r>)rrZpctxswrrrwrwrxnum_ctx_switchess   zProcess.num_ctx_switchescCsHt|j}g}|D]"\}}}t|||}||qtrD||Sr)rpZ proc_threadsrrZpthreadr}rr)rrrZ thread_idutimeZstimerrwrwrxrs  zProcess.threadsinetc Cs |tvr(td|dddtDftrt|\}}g}t|j}|D]D}|\}}} } } } } ||vrL| |vrLt||| | | | t}| |qL| t |St|\}}t |j||}g}|D]2}|\}}} } } } t||| | | | t}| |qt r| |S)NrrcSsg|] }t|qSrwrrrwrwrxrrz'Process.connections..)r rrrrprrr rr}rrZproc_connectionsr)rrrrr~rrrrrrrr4rrrwrwrxrs:     zProcess.connectionsNcCst|j||jSr)rZwait_pidrr)rtimeoutrwrwrxwaitsz Process.waitcCs t|jSr)r getpriorityrrrwrwrxnice_getszProcess.nice_getcCst|j|Sr)r setpriorityr)rvaluerwrwrxnice_set#szProcess.nice_setcCs|td}t|dS)Nr4?)rr PROC_STATUSESget)rcoderwrwrxr4'szProcess.statuscCs(|}t|td|tdddS)Nr?r@r)rrZpiorrrwrwrx io_counters-s  zProcess.io_counterscCs>tr|jdkrdStstr*t|jp(dSttr4dnddS)z)Return process current working directory.rNrr)rrrHAS_PROC_OPEN_FILESrpZproc_cwdrr rrwrwrxcwd6sz Process.cwdZmmaprfrhcCstdSr)rrrwrwrx_not_implementedKszProcess._not_implementedcCst|j}dd|DS)z8Return files opened by process as a list of namedtuples.cSsg|]\}}t||qSrw)rZ popenfile)rpathrrwrwrxrUrz&Process.open_files..)rprr)rrrwrwrx open_filesQs zProcess.open_filescCst|j}tr||S)z=Return the number of file descriptors opened by this process.)rprrrrrrwrwrxnum_fds\s zProcess.num_fdscCs t|jSr)rpZproc_cpu_affinity_getrrrwrwrxcpu_affinity_getjszProcess.cpu_affinity_getc Cstttt}|D]}||vrtd||fqzt|j|WnZty}zB|j t j t j fvr|D]}||vrltd||fqlWYd}~n d}~00dS)Nz#invalid CPU #%i (choose between %s)) tuplerrrrrpZproc_cpu_affinity_setrrrrZEDEADLK)rZcpusZallcpusrrrwrwrxcpu_affinity_setns$zProcess.cpu_affinity_setcCs t|jSr)rpZproc_memory_mapsrrrwrwrx memory_mapsszProcess.memory_mapscCsP|durt|j|St|dkr2tdt||\}}t|j|||SdS)Nrz4second argument must be a (soft, hard) tuple, got %s)rpZproc_getrlimitrrrrZproc_setrlimit)rresourceZlimitsZsoftZhardrwrwrxrlimits zProcess.rlimit)r)N)N)0__name__ __module__ __qualname____doc__ __slots__rrrrrrrrKrrrrr3rrr{r rrZmemory_full_infor<rrrrrrrr4r rrZnt_mmap_groupedZ nt_mmap_extrrrHAS_PROC_NUM_FDSrrrrrrwrwrwrxrIs                 !           r)F)~r contextlibrrrZxml.etree.ElementTreeZetreeZ ElementTreer collectionsrrrrrrrprrr r r r r rrrrrrZ_compatrrrrZ__extra__all__ZSIDLZ STATUS_IDLEZSRUNZSTATUS_RUNNINGZSSLEEPZSTATUS_SLEEPINGZSSTOPZSTATUS_STOPPEDrZ STATUS_ZOMBIEZSWAITZSTATUS_WAITINGZSLOCKZ STATUS_LOCKEDr ZSDEADZ STATUS_WAKINGZSONPROCZTCPS_ESTABLISHEDZCONN_ESTABLISHEDZ TCPS_SYN_SENTZ CONN_SYN_SENTZTCPS_SYN_RECEIVEDZ CONN_SYN_RECVZTCPS_FIN_WAIT_1ZCONN_FIN_WAIT1ZTCPS_FIN_WAIT_2ZCONN_FIN_WAIT2ZTCPS_TIME_WAITZCONN_TIME_WAITZ TCPS_CLOSEDZ CONN_CLOSEZTCPS_CLOSE_WAITZCONN_CLOSE_WAITZ TCPS_LAST_ACKZ CONN_LAST_ACKZ TCPS_LISTENZ CONN_LISTENZ TCPS_CLOSINGZ CONN_CLOSINGZPSUTIL_CONN_NONEZ CONN_NONErZ getpagesizeZPAGESIZEZAF_LINKrZHAS_PER_CPU_TIMESrrrdictrrLrWr^Zpfullmemrbrergriryrzr{rrrrrr disk_usageZdisk_io_countersrZ net_if_addrsrrrrrrrrrrrrcontextmanagerrobjectrrwrwrwrxs6                           #      # (