JFIFxxC      C  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3RbrJFIFxxC      C  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3RbrB =_]y@sdZddlZddlZddlZddlZddlmmZddl 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 d5d6d7d8d9d:d;dd?d@g ZYe dAdBdCdDdEdFgZZe dGdHdIdJdKdLgZ[e[Z\e dMdBdDdNdOgZ]e dPdQZ^e dRdSZ_er^e dTdUdVdWdXdYdZd[gZ`ne dTdUdVdWdXgZ`d\d]Zad^d_Zbd`daZceSrdbdZdndcdZddded_ededfZfeserdgdhZgndidhZgdjdkZhddldmZiejjZjejkZkejlZlejmZmdndoZndpdqZoer$drdsZpdtduZqdvdwZrdxdyZsdzd{Zted|d}Zud~dZvesTer^ddZwnejwZwddZxddZyejzddZ{Gddde|Z}dS)z5FreeBSD, 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_timerssvmsmemtextmemdatamemstackcpunumnamesvmemtotalZ availablepercentusedfreeactiveinactivebufferscachedsharedwired scputimesusernicesystemidleirqpmemrErFtextdatastack pcputimes children_userchildren_system pmmap_groupedz*path rss, private, ref_count, shadow_count pmmap_extz6addr, perms path rss, private, ref_count, shadow_countsdiskio read_count write_count read_bytes write_bytes read_time write_timeZ busy_timec Cst}|\}}}}}}}}trtddR} xJ| D]B} | drVt| dd}q2| dr2t| dd}q2WWdQRX|||} |||} t|| |dd} t|| | | ||||||| S) z&System virtual memory as a namedtuple.z /proc/meminforbsBuffers:ris MemShared:N)round_) cextZ virtual_memropen startswithintsplitrrL)ZmemrMrPrQrRrVrTrSrUflineZavailrOrNrv@/opt/alt/python37/lib64/python3.7/site-packages/psutil/_psbsd.pyvirtual_memorys    "   rxcCs4t\}}}}}t||dd}t||||||S)z@System swap memory as (total, used, free, sin, sout) namedtuple.r)rn)roZswap_memrrsswap)rMrOrPsinsoutrNrvrvrw swap_memorysr|cCs"t\}}}}}t|||||S)z+Return system per-CPU times as a namedtuple)ro cpu_timesrW)rXrYrZr[r\rvrvrwr}sr}cCsBg}x8tD],}|\}}}}}t|||||}||qW|S)z'Return system CPU times as a namedtuple)rorrWappend)retZcpu_trXrYrZr[r\itemrvrvrwrs cCs.tdkrtgStjr tddt_tgS)z'Return system CPU times as a namedtuplerz&supported only starting from FreeBSD 8T)cpu_count_logicalr}r __called__NotImplementedErrorrvrvrvrwrs  FcCstS)z0Return the number of logical CPUs in the system.)rorrvrvrvrwrsrcCstdkrdSdS)Nr)rrvrvrvrwcpu_count_physicalsrcCsxd}t}|dk rb|d}|dkrb|d|d}t|}zt|dpRd}Wd|X|sttdkrtdS|S)z1Return the number of physical CPUs in the system.Nz r#zgroup/children/group/cpur) roZcpu_count_physrfindETZ fromstringlenfindallclearr)rsindexrootrvrvrwrs    c Cstrt\}}}}}nttrrt\}}}}}}}tdd.}x&|D]}|drDt|d}qDWWdQRXntrt\}}}}}}}t ||||S)z*Return various CPU stats as a named tuple.z /proc/statrmsintrrN) r ro cpu_statsrrprqrrrsrr scpustats) ZctxswZintrsZ soft_intrssyscallsZtrapsZfaultsZforksrtrurvrvrwrs     rc CsPg}t}x>|D]6}|\}}}}d}} t|||||| } || qW|S)zReturn mounted disk partitions as a list of namedtuples. 'all' argument is ignored, see: https://github.com/giampaolo/psutil/issues/906 N)rodisk_partitionsr sdiskpartr~) allretlist partitions partitiondevice mountpointfstypeoptsmaxfilemaxpathntuplervrvrwr?s   rc Cst}i}x|D]}y&t|}t|}t|\}}Wn0tk rn}z|jtjkr^Wdd}~XYqXt t drt |}t ||||||<qW|S)z)Get NIC stats (isup, duplex, speed, mtu).N NicDuplex) net_io_counterskeys cext_posixZ net_if_mtuZnet_if_is_runningZnet_if_duplex_speedOSErrorerrnoZENODEVhasattrrr snicstats)namesrrKmtuisupduplexspeederrrvrvrw net_if_stats\s       rc Cs&trzg}xltD]b}yt||}Wnttfk r@wYqXx.|D]&}t|}|||tj |qHWqW|S|tj krt d|d ddt Dft |\}}t }trtd}nt}xN|D]F}|\} } } } } }}| |kr| |krt| | | | | |t|}||qWt|S)z System-wide network connections.z+invalid %r kind argument; choose between %sz, cSsg|] }t|qSrv)repr).0xrvrvrw sz#net_connections..r)rpidsProcess connectionsrrlistr~rsconnr ValueErrorjoinsetrronet_connectionsr TCP_STATUSESadd)kindrpidZconsZconnfamiliestypesrawlistrfdfamtypeladdrraddrr4ntrvrvrwrps6       rcCsbyt\}}}Wntk r&dSX|dk}|rt|j|j|jnt|j|jYn\tk rpt|j|jYn<t k r|jdkrdt krt|j|jnYnXdS)Nr) rrrr_name_ppidrrr rr)selfargskwargs)funrvrwwrapper#s   z wrap_exceptions..wrapper) functoolswraps)rrrv)rrwwrap_exceptionssrc csty dVWndttfk rNt|jrd?Z%e$d>d@Z&dAdBZ'e(redCdDZ)ne'Z)e*redEdFZ+ne'Z+eredGdHZ,edIdJZ-edKdLZ.edQdMdNZ/d1S)Rrz1Wrapper class around underlying C implementation.rrr_cachecCs||_d|_d|_dS)N)rrr)rrrvrvrw__init__NszProcess.__init__cCst|jdS)z+Raise NSP if the process disappeared on us.N)ro proc_namer)rrvrvrw _assert_aliveSszProcess._assert_alivecCs$t|j}t|ttks t|S)z;Retrieves multiple process info in one shot as a raw tuple.)rorrrrr)rrrvrvrwoneshotYs zProcess.oneshotcCs|j|dS)N)rcache_activate)rrvrvrw oneshot_enteraszProcess.oneshot_entercCs|j|dS)N)rcache_deactivate)rrvrvrw oneshot_exitdszProcess.oneshot_exitcCs(|td}|dk r|St|jS)NrK)rrrorr)rrKrvrvrwrKgsz Process.namec Csvtr|jdkrdSt|jStrR|jdkr0dSt|td|jSQRXn |}|rnt |dpldSdSdS)Nrz /proc/%s/exe) r rroZproc_exerrosreadlinkcmdliner)rrrvrvrwexels    z Process.exec Cstr|jdkrgStry t|jStk r}zT|jtjkrt|jr^t |j|j |j qt |js|t |j|j |j qgSnWdd}~XYqXn t|jSdS)Nr)rrrroZ proc_cmdlinerrEINVALrrrrrr)rrrvrvrwrs    zProcess.cmdlinecCs t|jS)N)roZ proc_environr)rrvrvrwenvironszProcess.environcCs:|td}t}y||Stk r4dSXdS)Nr;)rrrZget_terminal_mapKeyError)rZtty_nrZtmaprvrvrwterminals zProcess.terminalcCs|td|_|jS)Nr3)rrr)rrvrvrwr3sz Process.ppidcCs.|}t|td|td|tdS)Nr5r6r7)rrpuidsr)rrawtuplervrvrwuidss   z Process.uidscCs.|}t|td|td|tdS)Nr8r9r:)rrpgidsr)rr rvrvrwgidss   z Process.gidscCs8|}t|td|td|td|tdS)NrArBrCrD)rrrar)rr rvrvrwr}s    zProcess.cpu_timescCs|tdS)NrJ)rr)rrvrvrwcpu_numszProcess.cpu_numcCs@|}t|td|td|td|td|tdS)NrErFrGrHrI)rr]r)rr rvrvrw memory_infos    zProcess.memory_infocCs|tdS)Nr<)rr)rrvrvrwr<szProcess.create_timecCs trt|jSt|SdS)N)HAS_PROC_NUM_THREADSrorrrthreads)rrvrvrw num_threadss zProcess.num_threadscCs$|}t|td|tdS)Nr=r>)rrpctxswr)rr rvrvrwnum_ctx_switchess zProcess.num_ctx_switchescCsLt|j}g}x*|D]"\}}}t|||}||qWtrH||S)N)roZ proc_threadsrrpthreadr~rr)rrrZ thread_idutimeZstimerrvrvrwrs zProcess.threadsinetc Cs"|tkr(td|dddtDftrt|\}}g}t|j}xZ|D]R}|\}}} } } } } | |jksrt||krN| |krNt||| | | | t }| |qNW| t |St|\}}t |j||}g}x:|D]2}|\}}} } } } t||| | | | t }| |qWtr| |S)Nz+invalid %r kind argument; choose between %sz, cSsg|] }t|qSrv)r)rrrvrvrwrsz'Process.connections..)r rrrrorrrr rr~rrZproc_connectionsr)rrrrrrrrrrrrr4rrrvrvrwrs6     zProcess.connectionsNcCst|j||jS)N)rZwait_pidrr)rtimeoutrvrvrwwaitsz Process.waitcCs t|jS)N)r getpriorityr)rrvrvrwnice_getszProcess.nice_getcCst|j|S)N)r setpriorityr)rvaluervrvrwnice_set#szProcess.nice_setcCs|td}t|dS)Nr4?)rr PROC_STATUSESget)rcodervrvrwr4'szProcess.statuscCs(|}t|td|tdddS)Nr?r@r)rrpior)rr rvrvrw io_counters-s   zProcess.io_counterscCs>tr|jdkrdStstr*t|jp(dSttr4dnddS)z)Return process current working directory.rNz&supported only starting from FreeBSD 8r)rrrHAS_PROC_OPEN_FILESroZproc_cwdrr )rrvrvrwcwd6s z Process.cwdZmmapz*path rss, private, ref_count, shadow_countz6addr, perms path rss, private, ref_count, shadow_countcCstdS)N)r)rrvrvrw_not_implementedKszProcess._not_implementedcCst|j}dd|DS)z8Return files opened by process as a list of namedtuples.cSsg|]\}}t||qSrv)r popenfile)rpathrrvrvrwrUsz&Process.open_files..)rorr)rrrvrvrw open_filesQs zProcess.open_filescCst|j}tr||S)z=Return the number of file descriptors opened by this process.)rorrrr)rrrvrvrwnum_fds\s zProcess.num_fdscCs t|jS)N)roZproc_cpu_affinity_getr)rrvrvrwcpu_affinity_getjszProcess.cpu_affinity_getc Cstttt}x$|D]}||krtd||fqWyt|j|Wn\tk r}z>|j t j t j fkrx$|D]}||krttd||fqtWWdd}~XYnXdS)Nz#invalid CPU #%i (choose between %s)) tuplerrrrroZproc_cpu_affinity_setrrrrZEDEADLK)rZcpusZallcpusrrrvrvrwcpu_affinity_setns  zProcess.cpu_affinity_setcCs t|jS)N)roZproc_memory_mapsr)rrvrvrw memory_mapsszProcess.memory_mapscCsP|dkrt|j|St|dkr2tdt||\}}t|j|||SdS)Nrz4second argument must be a (soft, hard) tuple, got %s)roZproc_getrlimitrrrrZproc_setrlimit)rresourceZlimitsZsofthardrvrvrwrlimits  zProcess.rlimit)r)N)N)0__name__ __module__ __qualname____doc__ __slots__rrrrrrrrKrrrrr3r r r}r rrZmemory_full_infor<rrrrrrrr4r$r&rZnt_mmap_groupedZ nt_mmap_extr'r%r*HAS_PROC_NUM_FDSr+r,r.r/r2rvrvrvrwrIsf                !        r)F)~r6 contextlibrrrZxml.etree.ElementTreeetreeZ ElementTreer collectionsrrrrrrrorrr r r r r rrrrrr_compatrrrrZ__extra__all__ZSIDL STATUS_IDLEZSRUNSTATUS_RUNNINGZSSLEEPSTATUS_SLEEPINGZSSTOPSTATUS_STOPPEDr STATUS_ZOMBIEZSWAITSTATUS_WAITINGZSLOCK STATUS_LOCKEDr ZSDEAD STATUS_WAKINGZSONPROCZTCPS_ESTABLISHEDCONN_ESTABLISHEDZ TCPS_SYN_SENT CONN_SYN_SENTZTCPS_SYN_RECEIVED CONN_SYN_RECVZTCPS_FIN_WAIT_1CONN_FIN_WAIT1ZTCPS_FIN_WAIT_2CONN_FIN_WAIT2ZTCPS_TIME_WAITCONN_TIME_WAITZ TCPS_CLOSED CONN_CLOSEZTCPS_CLOSE_WAITCONN_CLOSE_WAITZ TCPS_LAST_ACK CONN_LAST_ACKZ TCPS_LISTEN CONN_LISTENZ TCPS_CLOSING CONN_CLOSINGZPSUTIL_CONN_NONE CONN_NONErZ getpagesizeZPAGESIZEZAF_LINKrZHAS_PER_CPU_TIMESrr%r8dictrrLrWr]Zpfullmemrardrerfrxr|r}rrrrrr disk_usageZdisk_io_countersrZ net_if_addrsrrrrrrrrrrrrcontextmanagerrobjectrrvrvrvrws(                                    # (